hdu 2048 錯排問題

2022-06-20 11:15:10 字數 918 閱讀 6740

錯排問題本質上就是乙個動態規劃問題,其狀態轉移方程為:

記d[n]為n個人錯排情況的總數。

那麼策略可以描述為:分析第n個人錯排的可能情況:

1)前n-1個人滿足錯排的情況,那麼第n個人加入後還要錯排意味著第n個人與前n-1個人裡的任意乙個交換字條(共有n-1種交換法)

2)若前n-1個人並不滿足錯排,但加入第n個人後滿足錯排。這必然意味著第n個人加入後與前n-1中的某個人交換字條後才滿足n個人錯排。而又因為原本前n-1人不滿足錯排,那麼前n-1個人中至少有乙個人手上的字條是匹配的,那麼第n個人就只能與匹配者交換字條。此時可以證明前n-1人中字條匹配者人數不能大於1,可以反證(如果有兩人字條匹配,那麼在第n個人交換後必然還有乙個人字條匹配,不滿足)

tip:

printf()輸出百分號的時候,有的oj上必須寫成%%,有的可以寫成%。嚴格點的話,還是採用第一種寫法穩妥。

ac**如下:

#include#include

#include

#include

using

namespace

std;

//錯排思想

long

long d[30

];long

long f(int

n)

else

}int main(void

)

double ans=double(cnt1)/double

(cnt2);

printf(

"%.2lf%%\n

",ans*100

);

//printf("%.2lf%\n",ans*100);

//這樣寫就是wronganser

}

return0;

}

錯排問題 hdu2048

錯排問題 問題 十本不同的書放在書架上。現重新擺放,使每本書都不在原來放的位置。有幾種擺法?這個問題推廣一下,就是錯排問題,是組合數學中的問題之一。考慮乙個有n個元素的排列,若乙個排列中所有的元素都不在自己原來的位置上,那麼這樣的排列就稱為原排列的乙個錯排。n個元素的錯排數記為d n 研究乙個排列錯...

錯排問題 hdu2048

n個有序的元素有n 種排列方式,如果乙個排列使得所有元素都不在原來的位置上的排列就叫錯排。1 錯排有兩種方法進行計算,一種是基於容斥定理最後得出來的乙個階乘的計算式,計算機對於階乘非常的不友好,因此第一種很少使用。2 由於階乘的原因,我們不得不再尋找一種計算錯排dn的方法。首先我們以1,2,3,4的...

HDU 2048 錯排公式

n n 個人全沒有中獎的概率 發生這種情況的所有可能性 情況總數 我們來想一想全部錯排該怎麼求。假設前n 1 role presentation n 1 n 1個人都完成了錯排,那麼第 n n 個人可以和這n 1 role presentation n 1 n 1個人任意乙個互換,那麼就完成了全部錯...