玻璃球的诱惑

来源:互联网 发布:linux 大于1g的文件 编辑:程序博客网 时间:2024/06/11 23:49

B 玻璃球的困惑

Time Limit:1000MS  Memory Limit:65536K
Total Submit:26 Accepted:4

Description

Bob是一个非常顽皮的小孩,每天都要出去和别的小孩玩玻璃球,不仅如此,他还喜欢收集各种各样的玻璃球, 
有大,有小,有红,有绿。。。 
但是Bob也是个爱动脑筋的小孩哦,这不,他又有了一个奇怪的想法:看着自己收集的玻璃,只有红色和绿色, 
也只有颜色不同,如果把它们从左往右摆成一条线。然后从左往右数,红色玻璃球的数目一直不小于绿色玻璃的数目,那么满足这个条件可以有多少种不同的摆法呢??这下可难住了Bob,你能告诉他吗? 

Input

输入有多个测试实例,每个测试实例两个正整数n,m分别表示红色和绿色玻璃球的个数(20 >= n>= m >= 1)。 

Output

每个测试实例输出一行,一个整数表示不同的摆放个数。(结果可能超过int) 

Sample Input

1 13 1

Sample Output

13
本来说回宿舍看数据库的,一看到这题的那个纸,然后又变成刷题了。。。这是一道轻工校赛题,不得不说自己的dp真差,每次看见题从心里就害怕,然后就不去分析,然后就是不会不会啊,后来看了推导还是不懂,然后的然后今天又看了一遍才懂,其实题不难,只是看到题就不会去分析了,还有方面就是做的少了,以后做菜鸟也要做有水平的啊!
dp[i][j]=dp[i-1][j-1]+dp[i-1][j],就这个式子理解了好久啊!!!!
#include<iostream>#include<cstdio>#include<string> #include<cstring>#include<cmath>#include<cstring>#include<algorithm>#include<queue>#include<stack>#include<vector>#include<climits>using namespace std; #define rep(i,n) for(i=0; i<(n); i++)#define repf(i,n,m) for(i=(n); i<=(m); i++)//正循环的#define repd(i,n,m) for(i=(n); i>=(m); i--) //负循环的 #define fab(a) (a)>0?(a):0-(a)#define ll long long#define arc(a) (a)*(a)#define inf 10000000   //最大值的#define exp 0.0000001     //浮点型的#define N   45  //记录开的数组ll dp[45][45];int main(){    memset(dp,0,sizeof(dp));    int i,j;     dp[0][0]=1;     repf(i,1,40)     {      repf(j,(i+1)/2,i)//必须从一半开始的       {       dp[i][j]=dp[i-1][j-1]+dp[i-1][j];//       printf("%lld ",dp[i][j]);       }  //     cout<<endl;       }        int n,m;       while(~scanf("%d%d",&n,&m))        cout<<dp[n+m][n]<<endl;     return 0;} 


原创粉丝点击