题解 P1490 买蛋糕
ButterflyDew · · 题解
- 首先明确第一个问题:这个最小的正整数是多少?
也许你可以打表看出来,也许不能,但别急,我们有看似靠谱一点的思维方法
看看样例:6
可行方案:
①
②
我们发现,对于方案①,组成3的时候有两种方法(1+2或3),而方案②只有一种。换而言之,3的利用是有浪费的。而不浪费的方案②还可以组成7。
那么,我们咋让她(每个数)都用好自己呢
很简单,百合就行了
联想一下二进制位下的数
其中
核心代码:
dp[1][1][1]=1;
for(int i=1;i<ans;i++)
for(int j=i;j<=(1<<(i-1));j++)
for(int k=i*(i-1)/2;k<(1<<i);k++)
for(int l=j+1;l<=k+1;l++)
if(l+k<=n)
dp[i+1][l][k+l]+=dp[i][j][k];
else
dp[i+1][l][n]+=dp[i][j][k];
注意
当然,也没必要跑这么死,比如
至于