n個人n個座位,求不能坐在自己座位上種數
如果一共有i個人,則第i個人的位置對於其他i-1個人都是合法的,則這i-1個人都可能坐在i的位置上。如果第i個人坐在坐他位置的人的位置上,則將這兩個人與其他的i-2個人分開了,有f[i-2]種;如果第i個人不坐在坐他位置的人的位置上,則剩下i-1個人不能坐自己的位置,則有f[i-1]種。
所以遞推式為:f[i]=(i-1)*(f[i-1]+f[i-2]);
騰訊2013.3.30號的決賽第一題就是這個題。
#include<stdio.h> __int64 f[105]; void main() { int t; int n; int i; f[1] = 0; f[2] = 1; for(i = 3; i <= 100; ++i) { f[i] = (i - 1) * (f[i - 1] + f[i -2]); f[i] %= (__int64)(1e9+7); } scanf("%d", &t); while(t--) { scanf("%d", &n); printf("%lld\n", f[n]); } }
相關推薦
n個人n個座位,求不能坐在自己座位上種數
如果一共有i個人,則第i個人的位置對於其他i-1個人都是合法的,則這i-1個人都可能坐在i的位置上。如果第i個人坐在坐他位置的人的位置上,則將這兩個人與其他的i-2個人分開了,有f[i-2]種;如果第i個人不坐在坐他位置的人的位置上,則剩下i-1個人不能坐自己的位置,則有f
有n個帶編號的人和n個帶編號的座位,求每個人都不坐在相同號碼座位的方案數目
題目描述: 有 n 位同學編號分別為1, 2, ..., n; 有 n 個座位編號分別為1, 2, ..., n。 現在為每一位同學安排一個座位,求每個同學都坐在與自己編號不同的座位的方案數目。 分析:動態規劃思想: 假設 i 位同學,i 個座
給定一個二維平面,平面上有 n 個點,求最多有多少個點在同一條直線上。
需求:給定一個二維平面,平面上有 n 個點,求最多有多少個點在同一條直線上。 分析思路: 1、將所有點二維座標化,即定義出所有點的x,y座標值 2、遍歷出所有取出兩點的情況(不考慮先後順序),根據任意兩點都確定一條直線,直線引數為k斜率,b與y軸交點的縱座標(此時x=0),將他們放入一個
給定平面上的n個點,求最多有多少個點共線
給定一個二維平面上的n個點,找出同一條直線上的最大點數。 解法: 窮舉,注意斜率不適用float作為鍵,精度損失。 class Solution { public: int gcd(int x,int y) { //求最大公約數 i
給出描述的n個節點,求其鄰居節點以及判斷兩個節點是否有直接聯絡
具體描述:txt檔案中儲存n個節點直接的聯絡,形如1,2表示節點1和節點2直接聯絡,或者說他們是鄰居。有很多組這樣的資料,要求將這些節點讀出來進行儲存。然後實現輸入節點號,輸出它的鄰居節點。以及輸入兩個節點ID號,判斷他們是否直接相連。分佈解析這個題目要求。1、先讀取txt檔
n個人戰成一圈,依次從0~m-1報數,誰是m-1就出圈,下一個人從0重新開始 依次迴圈下去,直到剩一人。
題目描述 每年六一兒童節,牛客都會準備一些小禮物去看望孤兒院的小朋友,今年亦是如此。HF作為牛客的資深元老,自然也準備了一些小遊戲。其中,有個遊戲是這樣的:首先,讓小朋友們圍成一個大圈。然後,他隨機指定一個數m,讓編號為0的小朋友開始報數。每次喊到m-1的那個小朋友要出列唱首歌,然後可以在禮品箱
n個人排成一圈,從1開始報數,數到3,退出,剩下的最後一個人
package test; import java.util.LinkedList; import java.util.List; public class Test4 { public static void main(String[] args){ Joese
正整數n劃分為m段,求m段的最大乘積 【區間DP】
時間限制:1000 ms | 記憶體限制:65535 KB 描述 給出兩個整數 n , m ,要求在 n 中加入m - 1 個乘號,將n分成m段,求出這m段的最大乘積 輸入第一行是一個整數T,表
約瑟夫問題(n個人圍圈報數,報m出列,最後剩下的是幾號?)
//n個人圍圈報數,報m出列,最後剩下的是幾號? #include <stdio.h> #include <stdlib.h> typedef struct node { int data; struct node *n
輸入兩個整數,求他們相除的餘數。用帶參的巨集來實現,程式設計序。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanne
hibernate 一對多 或者多對多時候,集合屬性怎麼分頁 過濾? 一個人一百個訂單,絕對要分頁的
1、集合過濾: 對於一個已經載入的Customer物件,假設對它的orders集合採用延遲載入機制,那麼當呼叫customer.getOrders().iterator()時,Hibernate就會初始化orders集合,然後到資料庫中去載
顧客銀行辦理業務時,首先在取號機上取號,然後坐在椅子上等候業務員叫號時前往視窗辦理業務,假設銀行現在有3個視窗可辦理業務,請採用訊號量和PV操作描述顧取號等候叫號和銀行業務員叫號辦理業務的同步操作。
顧客銀行辦理業務時,首先在取號機上取號,然後坐在椅子上等候業務員叫號時前往視窗辦理業務,假設銀行現在有3個視窗可辦理業務,請採用訊號量和PV操作描述顧取號等候叫號和銀行業務員叫號辦理業務的同步操作。 1)首先識別哪些事務可以作為程序 顧客,業務員 2)其次識別臨界資源,即程序共享的事務
7個人8個月,他們做的工業版春雨醫生估值6000萬
一次李蘭偉去某焦化廠看專案,碰巧看見脫硫裝置在反常地冒白煙。從事工業節能十餘年,李蘭偉轉了一圈就明白問題所在——裝置沒問題,是操作上出了偏差。於是,他花了20多分鐘跟對方提了一些解決建議。 李蘭偉不知道這次的舉手之勞,正是日後自己創業專案的一個典型場景。 一週後焦化廠老闆打來電話,一再表示感謝。一年前他們
PHP陣列的幾個操作,求並集,交集,差集,陣列與字串的相互轉換及陣列去重
在php中如果我想要對兩個陣列進行如並集、交集和差集操作,我們可直接使用php自帶的函式來操作如array_merge(),array_intersect(),array_diff(). 計算陣列的合併 array_merge與“+”的區別 array_merge() 函式
python 已知平行四邊形三個點,求第四個點
import numpy as np #已知平行四邊形三個點,求第四個點 #計算兩點之間的距離 def CalcEuclideanDistance(point1,point2): vec1 = np.array(point1) vec2 = np.array(
輸入任意兩個整數,求兩者的商。使用異常處理機制捕獲零除異常和引數格式異常
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Con
程式設計題:給定兩個集合,求兩個集合的交集
題目:給定兩個整數集合,求兩個集合的交集。 法一:排序法(先將集合排序,在找交集) 排序時間複雜度O(nlogn),對集合遍歷查詢O(n);總的時間複雜度O(nlogn); void main() { int a[] = { 1, 5, 9, 8,
分別採用遞迴和非遞迴方式編寫兩個函式,求一棵二叉樹中葉子節點個數
#include #include #define MAXSIZE 50 typedef char datatype; typedef struct node { datatype data; struct node *lchild,*rchild; } bintnode,*bintre
已知矩形的任意三個點,求第四個點
做car的旅行路線遇到的,先用向量法找出直角邊,再利用對角線上的點橫座標之和等於中點橫座標的二倍求出。 #include<cstdio> struct zuobiao { int x,y; }; zuobiao qiudian(int
一個字串A的子串被定義成從A中順次選出若干個字元構成的串。如A=“cdaad" ,順次選1,3,5個字元就構成子串" cad" ,現給定兩個字串,求它們的最長共公子串。 小王對既是素數又是迴文的
一個字串A的子串被定義成從A中順次選出若干個字元構成的串。如A=“cdaad" ,順次選1,3,5個字元就構成子串" cad" ,現給定兩個字串,求它們的最長共公子串。 小王對既是素數又是迴文的數特