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