(信息学奥赛一本通 1304 洛谷 1025)数的划分#线性动态规划#

题意:把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 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]); }

猜你喜欢

转载自www.cnblogs.com/ljy-endl/p/11242617.html
今日推荐