整體思路:
f[i][j]表示將i劃分成j份的方法數。 f[i][j]=f[i-j][j]+f[i-1][j-1];1.f[i-j][j]:最小的乙份》=2的方案總數。 所以所有數》=2,有限制, 但此方案數等於把每份都減1的方案數, 等效之後就沒有限制了。 2.f[i-1][j-1]最小的乙份=1的方案總數。 只需最後加上乙份1就行,其餘每份大小無限制。
失誤之處:
開始用fij表示i分成j份的方法數,並用乘法原理dp,但是後來發現這種情況下無法判重,,然後就蒙蔽了。
開始沒有判斷for
(
int
j = 1;j <= k && j <= i;j++)
體會心得:
這道題不就是放蘋果麼,,竟然沒想出來。。應該好好複習
ac**:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include
#include
#include
#include
using
namespace
std;
int
n,k,dp[300][10];
int
main()
NOIP 2001 數的劃分
問題描述 將整數 n 分成 k份,且每份不能為空,任意兩份不能相同 不考慮順序 例如 n 7,k 3,下面三種分法被認為是相同的。問有多少種不同的分法。輸入 n,k 輸出 乙個整數,即不同的分法。樣例 輸入 7 3 輸出 4 四種分法為 6 n 200,2 k 6 記 f i,j 為 k i n j...
NOIP2001 數的劃分
codevs 1039 1039 數的劃分 2001年noip全國聯賽提高組 時間限制 1 s 空間限制 128000 kb 題目等級 gold 題解 題目描述 description 將整數n分成k份,且每份不能為空,任意兩種劃分方案不能相同 不考慮順序 例如 n 7,k 3,下面三種劃分方案被認...
noip2001 數的劃分 2008 11 5
noip2001 數的劃分 2008.11.5 心得 本以為搜尋過不了,只有dp可以ac,實際上,搜尋也可以過完。如果實在想不出來 dp,那就用最好的搜尋來做!法一 搜尋 program sdhf const fin sdhf.in fout sdhf.out var n,k,sum longint...