1. 程式人生 > >n個人n個座位,求不能坐在自己座位上種數

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" ,順次選135字元就構成子串" cad" ,現給定兩字串它們的最長共公子串。 小王對既是素數又是迴文的

一個字串A的子串被定義成從A中順次選出若干個字元構成的串。如A=“cdaad" ,順次選1,3,5個字元就構成子串" cad" ,現給定兩個字串,求它們的最長共公子串。 小王對既是素數又是迴文的數特