放苹果(动态规划)

http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=2679
/*
分析:
dp[i][j] 代表i个苹果 j个盘子时有多少放法

有如下几种情况
1: 苹果的个数为1时 只有一种方法
2: 盘子的个数为1时 只有一种方法
3: 当i>=j是(苹果大于盘子) 第一 :至少有一个盘子空着不放dp[i][j-1] 第二 :每个盘子放一个苹果后还剩i-j
个苹果 再计算i-j个苹果放在j个盘子的情况 dp[i-j][j];
4: 当i<j时 盘子多了就相当于i个苹果放进i个盘子的情况dp[i][i];
*/

include<stdio.h>

int main()
{
int dp[11][11];
int t;
scanf("%d",&t);
while(t--)
{
int m,n;
scanf("%d%d",&m,&n);
for(int i=0; i<=n; i++)
dp[1][i]=dp[0][i]=1;
for(int i=0; i<=m; i++)
dp[i][0]=dp[i][1]=1;
for(int i=2; i<=m; i++)
for(int j=2; j<=n; j++)
{
if(i>=j)dp[i][j]=dp[i][j-1]+dp[i-j][j];
else dp[i][j]=dp[i][i];
}

    printf("%d
",dp[m][n]);

}

return 0;

}

梦里不知身是客,一晌贪欢。
原文地址:https://www.cnblogs.com/dccmmtop/p/5365190.html