目錄dp
dfs將整數n分成k份,且每份不能為空,任意兩個方案不相同(不考慮順序)。
例如:n=7,k=3,下面三種分法被認為是相同的。
1,1,5;
1,5,1;
5,1,1.
問有多少種不同的分法。
輸入格式:
n,k (6輸出格式:
1個整數,即不同的分法。
輸入樣例#1:複製
7 3
輸出樣例#1:複製
4
四種分法為:
1,1,5
1,2,4;
1,3,3;
2,2,3.
f[ i ][ x ] 表示 i 分成 x 個非空的數的方案數,
當 i < x 時,f[ i ][ x ]=0,當 i==x 時,f[ i ][ x ]=1
當 x 為1的時候,就是只用分乙份的時候 f 的值就是1
關鍵是要知道如下情況:
狀態轉移方程:
**:
#includeusing namespace std;
int n,k;
int f[210][7];
int main()
cout就注意乙個點:如果不剪枝,不單單是tle的問題,連正確答案都出不來,會重複計算
**:#includeusing namespace std;
int n,k;
int sum;
void dfs(int step,int num,int rest)
/* 同時迴圈最大只能進行到t/s,
避免出現因前面的數過大而導致後面的數無法取的情況。*/
//for(int i=step;i<=num;i++)
//剪枝:不需要列舉到num,否則既有可能重複計算,又會加大運算
for(int i=step;i<=num/rest;i++) //剪枝 i<=num/rest
dfs(i,num-i,rest-1);
}int main()
P1025 數的劃分
將整數nn分成kk份,且每份不能為空,任意兩個方案不相同 不考慮順序 例如 n 7n 7,k 3k 3,下面三種分法被認為是相同的。1,1,51,1,5 1,5,11,5,1 5,1,15,1,1.問有多少種不同的分法。輸入格式 n,kn,k 6輸出格式 11個整數,即不同的分法。include d...
P1025 數的劃分
展開 將整數nn分成kk份,且每份不能為空,任意兩個方案不相同 不考慮順序 例如 n 7n 7,k 3k 3,下面三種分法被認為是相同的。1,1,51,1,5 1,5,11,5,1 5,1,15,1,1.問有多少種不同的分法。n,kn,k 611個整數,即不同的分法。四種分法為 1,1,51,1,5...
P1025 數的劃分
題目描述 將整數n分成k份,且每份不能為空,任意兩個方案不相同 不考慮順序 例如 n 7,k 3,下面三種分法被認為是相同的。1,1,5 1,5,1 5,1,1 問有多少種不同的分法。輸入格式 n,k 6輸出格式 1個整數,即不同的分法。輸入輸出樣例 輸入 1 7 3 輸出 1 說明 提示 四種分法...