BIT1008 Putting Apples

来源:互联网 发布:央视网络春晚策划方案 编辑:程序博客网 时间:2024/06/01 14:28

将n个苹果放入k个盘子里,问多少种方法,(1,2)和(2,1)是同一种

用递推的方法

用d[n][k]表示将n个苹果放入k个盘子的方法数

如果k个盘子里有一个空的,方法数为d[n][k-1]

如果没有空的,方法数为d[n-k][k]        转移方程为    d[n][k]=d[n][k-1]+d[n-k][k]


如果盘子数大于苹果数d[n][k]=d[n][n];

#include<iostream>#include<algorithm>using namespace std;int d[110][110];void dp(int n,int k)//在k个盘子里装n个苹果{if(n==0||k==1){d[n][k]=1;return;}if(k-1>=0&&d[n][k-1]==-1){dp(n,k-1);}if(n-k>=0&&d[n-k][k]==-1){dp(n-k,k);}if(n-k<0){d[n][k]=d[n][n];return;}d[n][k]=d[n][k-1]+d[n-k][k];//转移方程}int main(){int n,k;memset(d,-1,sizeof(d));while(cin>>n>>k){if(d[n][k]==-1){dp(n,k);}cout<<d[n][k]<<endl;}return 0;}


原创粉丝点击