題目描述
將整數 nn 分成 kk 份,且每份不能為空,任意兩個方案不相同(不考慮順序)。
例如: n=7n=7 , k=3k=3 ,下面三種分法被認為是相同的。
1,1,51,1,5 ;
1,5,11,5,1 ;
5,1,15,1,1 .
問有多少種不同的分法。
輸入輸出格式
輸入格式:
n,k ( 6輸出格式:
1個整數,即不同的分法。
很久沒寫 \(dfs\) 了, 回來複習一下
\(dfs\) + 剪枝解決即可, 剪枝不用多說, 大於合成值直接不下一層即可, 注意列舉的新的分值是單調遞增的, 乙個不符合就直接 \(break\) 即可
還有一點比較巧妙的是 \(dfs\) 順序, 本題中要求合成數不重複, 我們利用列舉的數單調遞增來解決容斥的問題就好: 在每一層 \(dfs\) 裡記錄上一層選的大小, 列舉時從那個值開始, 便能保證遞增
#include#include#include#include#include#define ll long long
using namespace std;
int rd()
while(c >= '0' && c <= '9')
return flag * out;
}int num, k;
ll ans;
void dfs(int left, int now, int last)
for(int i = last;i <= num;i++)
}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 說明 提示 四種分法...