n个数分为m堆有多少种分法(青岛理工邀请赛)动态规划
生活随笔
收集整理的這篇文章主要介紹了
n个数分为m堆有多少种分法(青岛理工邀请赛)动态规划
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有n個相同的數,把它分為m堆,有多少種分法。
樣例:7 3
輸出:4
注:(1,1,5)(1,5,1) (5,1,1)是一種分法。
//算是看了網上很多的算法,這里只是做一個解釋
//網上關于這個的算法很多,我看了很多之后,自己按照某一種的思路自己打了一個
工具:a[1000][1000];//dp[i][j]是網上大佬們都喜歡用的,我是個菜雞,我喜歡用簡單點的。
a[i][j] 表示將i分為j個數;
//這時候,要是你還是用之前的思路,是不行的,容我細細解析大佬們的思維;
//大局觀:首先,這j個數進行考察,首先,要么全都是大于等于2的,否則就有一個是1;
//假如有一個是1,那么就直接將這個數拿出去,就是a[i-1][j-1];
//假如說全都是大于等于2,那么就將每個都拿掉一層1,很明顯,拿掉一層其實不影響數量的
//到這里,我們就證明了,為什么 a[i][j] =a[i-j][j]+a[i-1][j-1];
//因為,這里用了關于每個數一個整體的討論,從而構建了遞推公式
//邊界條件:
j= =1||i==j : a[i][j] = 1;
同時,當i<j a[i][j] =0;//這個通過不處理實現。
代碼如下:
努力加油a啊,(o)/~
總結
以上是生活随笔為你收集整理的n个数分为m堆有多少种分法(青岛理工邀请赛)动态规划的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 青岛理工邀请赛(难受的一次经历)之显示屏
- 下一篇: hdu 1408(高精度)坑人嫩