(信息学奥赛一本通 1304 洛谷 1025)数的划分

来源:互联网 发布:网络被运营商劫持投诉 编辑:程序博客网 时间:2024/05/18 07:02

题意:把n分成k份,有多少种不同的方法。

当n小的时候深搜是0k的。(6<=n<=200)

所以说要使用动态规划

状态转移方程

ans[k][n]表示把n分成k份的方案数。 ans[0][0]=1;

ans[i][j]=ans[i-1][j-1]+ans[i][j-i];

=至少有一个盒子只有一个小球+没有一个盒子只有一个小球

至少有一个盒子只有一个小球:因为盒子相同,所以=份数-1,球数-1

没有一个盒子只有一个小球:把每个盒子都抽出一个小球,所以份数不变,球数-i

#include<cstdio>  
using namespace std;  
int ans[10][205];  
int main(){  
    int n,k;
    scanf("%d%d",&n,&k);  
    ans[0][0]=1;  
    for(int i=1;i<=k;i++)
        for(int j=i;j<=n;j++)
            ans[i][j]=ans[i-1][j-1]+ans[i][j-i];
    printf("%d",ans[k][n]);
}

原创粉丝点击