【DP】【Asia - Harbin - 2010/2011】【Permutation Counting】

【題目描述】Given a permutation a1, a2,...aN of {1, 2,..., N}, we define its E-value as the amount of elements where ai > i. For example, the E-value of? permutation {1, 3, 2, 4} is 1, while the E-value of {4, 3, 2, 1} is 2.? You are requested to find how many permutations of {1, 2,..., N} whose E-value? is exactly k.

?

Input

There are several test cases, and one line for each case, which contains two integers, N and k. (1$ \le$N$ \le$1000, 0$ \le$k$ \le$N).

?

?

Output

Output one line for each case. For the answer may be quite huge, you need to output the? answer module 1,000,000,007.

Explanation for the sample:

There is only one permutation with E-value 0: {1, 2, 3}, and there are four permutations? with E-value 1: {1, 3, 2}, {2, 1, 3}, {3, 1, 2}, {3, 2, 1}

?

?

Sample Input

3 0 
3 1

?

Sample Output

1 
4

【個人體會】一開始在YY能不能找到規律直接能算出答案,然后還打了一個暴力算出了10以內的情況,
后來發現找不出來,于是才回歸正道。聯想到全錯位排列的遞推方式,立馬懂了這題其實就是個DP。

【題目解析】假設我已經求出了N-1個數,其中ai>i為K個的總方案數。那么考慮添加N這個元素進去
,現在N正好放在第N位上面,那么此時是的排列正好屬于DP[N][K],然后將這個元素和之前的ai>i的
元素進行交換,一共是K種交換,得到的方案數都是屬于DP[N][K],因此DP[N][K]+=DP[N-1][K]*(K+1),
另外一種是將元素N和ai<=i的元素進行交換,這樣的話就會多出1個ai>i的元素(即N這個元素)。因此
DP[N][K]+=DP[N-1][K-1]*(N-1-(K-1))

【代碼如下】

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 typedef long long int64;
 6 
 7 const int64 mod = 1000000007;
 8 
 9 int64 F[1001][1001], N, K;
10 
11 int64 Dp(int64 n, int64 k)
12 {
13     if (F[n][k]) return F[n][k];
14     if (n == 0 || n == k) return 0;
15     if (k == 0) return 1;
16     int64 t1 = Dp(n - 1, k) * (k + 1) % mod, t2 = Dp(n - 1, k - 1) * (n - k) % mod;
17     int64 tmp = (t1 + t2) % mod;
18     F[n][k] = tmp;
19     return tmp;
20 }
21 
22 int main()
23 {
24     while (cin >> N >> K) cout << Dp(N, K) << endl;
25     return 0;
26 }
 

?

 

?

轉載于:https://www.cnblogs.com/GXZC/archive/2012/12/31/2840498.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260123.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260123.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260123.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

三豐三坐標編程基本步驟_三豐三坐標CRYSTA APEX S776

日本三豐MITUTOYO從1934年成立至今&#xff0c;專力致于精密測量儀器的研發和生產&#xff0c;在七十多年中&#xff0c;日本三豐量具MITUTOYO已成為世界最大綜合測量儀器的制造商&#xff0c;它生產的產品包括千分尺&#xff0c;卡尺&#xff0c;千分表&#xff0c;高度尺&…

oracle的文件后綴名,轉:數據文件的擴展名是ora,dbf,dat的,有什么區別?

只是通過擴展名來標識文件的類型而已&#xff0c;對于數據文件不管是ora/dat/dbf&#xff0c;都是一樣的&#xff0c;沒有什么區別。.dbf-數據文件&#xff0c; .tmp-臨時文件&#xff0c;.log-重作日志文件(redo log file)&#xff0c; .ctl-控制文件.ora-參數文件&#xff0c…

Unity3D研究院之Android同步方法讀取streamingAssets

版本Unity5.3.3 Android 小米pad1 首先非常感謝 守著陽光 同學在下面的留言。讓我解決了一個大的謎團。。 開始我知道 StreamingAssets 路徑是這個 path “jar:file://” Application.dataPath “!/assets/”; 文檔在這里&#xff1a; http://docs.unity3d.com/Manual/Strea…

Codeforces Round 261 Div.2 D Pashmak and Parmida's problem --樹狀數組

題意&#xff1a;給出數組A&#xff0c;定義f(l,r,x)為A[]的下標l到r之間&#xff0c;等于x的元素數。i和j符合f(1,i,a[i])>f(j,n,a[j])&#xff0c;求有多少對這樣的(i,j). 解法&#xff1a;分別從左到右&#xff0c;由右到左預處理到某個下標為止有多少個數等于該下標&…

JQuery AJAX提交中文亂碼的解決方案

$.post(doSearch.action, {page : page,vip : vip,searchType : searchType,subtype : subtype,type : type,contentType: "application/x-www-form-urlencoded; charsetutf-8", keyword : keyword}, function(data) //回傳函數{var val;}); 解決這個中文亂碼問題&am…

列舉ospf的5種報文類型_危險品貨物各種包裝類型以及裝箱技巧

對于危險貨物來說&#xff0c;其危險性的大小除與貨物的本身性質有關外&#xff0c;還與貨物的包裝方式密切相關。因而&#xff0c;危險貨物進箱條件的確定&#xff0c;也必須考慮到貨物的包裝方法。一、集裝箱內徑20GP內徑&#xff1a;長5.8M*寬2.34M*高2.34M40GP內徑&#xf…

linux一行多個命令行,如何在一行中運行多個Linux命令

對于每個Linux管理員來說&#xff0c;熟練使用各種命令行是他們的特性。但對于普通用戶來說&#xff0c;可能還是有難度&#xff0c;您需要繼續練習Linux命令&#xff0c;并找到使該任務更有效的方法。實現這個特定目標的一種方法是學習一些技巧&#xff0c;這些技巧可以提高發…

Java 數組基礎

數組 數組&#xff08;Array&#xff09;&#xff1a;相同類型數據的集合。 定義數組 方式1&#xff08;推薦&#xff0c;更能表明數組類型&#xff09; type[] 變量名 new type[數組中元素的個數]; 比如&#xff1a; int[] a new int[10]; 數組名&#xff0c;也即引用a&…

車輛跟馳模型matlab代碼實現_MATLAB——考慮駕駛員特性及前車速度的快速路模型...

重發一下之前誤刪的一篇~目前大多數元胞自動機模型并沒有考慮前車速度&#xff0c;大多數同向行駛的模型中車輛都是處在一個完全跟車的狀態&#xff0c;無論前車是加速還是減速&#xff0c;后車駕駛者都只是根據自己的車速判斷是減速跟馳還是變換車道來尋求尋求更合理的行駛狀態…

linux nc命令

參考 :http://www.linuxso.com/command/nc.html NC 全名 Netcat (網絡刀)&#xff0c;作者是 Hobbit && ChrisWysopal。因其功能十分強大&#xff0c;體積小巧而出名&#xff0c;又被大家稱為“瑞士軍刀”。nc - TCP/IP swiss army knife nc 常用于溢出、反向鏈接、上傳…

收藏一些自己認為好的網站或博客

月光博客 seo每天一貼 虎嗅網 李巖的博客 中郵閱讀網&#xff0c;專門看電子期刊的&#xff0c;很不錯的免費閱讀期刊網。 seay web安全技術博客: http://www.cnseay.com 陸陸續續編輯中... 轉載于:https://www.cnblogs.com/caoyuanzhanlang/archive/2013/01/05/2846086.html

shell 判斷字符串相等_編程小短文:Bash子字符串還在用==?試試=~性能瞬間飆升100倍...

引言Bash 是 Linux 系統下欽定的 shell。你可以通過cat /etc/shells查看當前系統支持的 shell 種類。Bash 不但是系統管理員與內核交互的利器&#xff0c;且是一種語言&#xff0c;可以編寫大多數系統的自動化腳本&#xff0c;用于簡化運維工作。今天我們學習一個知識點&#x…

linux系統聯網命令,Linux系統常用的網絡命令及使用方法

Linux系統常用的網絡命令及使用方法Linux是一套免費使用和自由傳播的類Unix操作系統&#xff0c;是一個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。下面小編整理了Linux系統常用的網絡命令及使用方法&#xff0c;希望對大家有幫助!1、pingping命令工作在O…

Xss Csrf 簡介

一、Js在web的執行環境 1.直接觸發 ?在HTML頁中插入<script></script>腳本標記。JS嵌入到HTML中的兩種方式&#xff1a; ?1&#xff09;直接嵌入<script>標簽 <script language“javascript”> document.write(“hello world!”); </script> ?…

Cracking the Coding Interview 5.2

Given a(decimal -e.g. 3.72)number that is passed in as a string, print the binary representation. If the number can not be represented accurately in binary, print "ERROR" 整數部分&#xff1a; 對2取余&#xff0c;然后向右移動一位&#xff0c;重復直到…

python的render函數_帶函數return的Flask render_模板

TL&#xff1b;DR在這種情況下&#xff0c;我想我會選擇使用我現在的4個選項我將介紹4種選擇&#xff0c;其中一些可能比其他更可行。在如果您擔心execute表示的代碼存在代碼重復(DRY)&#xff0c;您可以簡單地定義一個兩個路由都可以調用的函數&#xff1a;def execute():# ex…

Google開源Leak Finder——用于檢測內存泄漏的JavaScript工具

近日&#xff0c;Google開源了Leak Finder&#xff0c;這款工具可以查看JavaScript應用的堆&#xff0c;進而發現內存泄漏。 作為一門垃圾收集語言&#xff0c;JavaScript并不會出現常見的內存泄露情況&#xff0c;特別是像C等語言中所見到的那種。但如果依舊將內存分配給那些不…

linux 定時訪問文件夾,Linux定時同步文件夾

-v, --verbose 詳細模式輸出-q, --quiet 精簡輸出模式-c, --checksum 打開校驗開關&#xff0c;強制對文件傳輸進行校驗-a, --archive 歸檔模式&#xff0c;表示以遞歸方式傳輸文件&#xff0c;并保持所有文件屬性&#xff0c;等于-rlptgoD-r, --recursive 對子目錄以遞歸模式處…

windows apache 開啟 GZIP

從服務端優化來說&#xff0c;通過對服務端做壓縮配置可以大大減小文本文件的體積&#xff0c;從而使加載文本的速度成倍的加快。目前比較通用的壓縮方法是啟用gzip壓縮。它 會把瀏覽器請求的頁面&#xff0c;以及頁面中引用的靜態資源以壓縮包的形式發送到客戶端,然后在客戶端…

python必備插件_5框酷斃的python插件工具

展開全部工欲善其事必先利其器&#xff0c;一個好的工具能讓起到事半功倍32313133353236313431303231363533e59b9ee7ad9431333433646531的效果&#xff0c;Python社區提供了足夠多的優秀工具來幫助開發者更方便的實現某些想法&#xff0c;下面這幾個工具給我的工作也帶來了很多…