zoukankan      html  css  js  c++  java
  • hdu 1267 下沙的沙子有几粒?

    hdu 1267 下沙的沙子有几粒?

    参考自大牛http://www.wutianqi.com/?p=2642

    分析,这题其实是H和D的组合排列问题,只不过要考虑期间累计的H和D的数量关系。

    用DP来做,可以推导出:

    dp[i][j] = dp[i-1][j] + dp[i][j-1]

    dp[][]前一个表示H的数量,后一个表示D的数量。

    分上面那种情况是因为最后一个必然是H或者D,而此时可以考虑把新加的一个放在最后,因为假如加的是H,如果加在[i-1][j]中加入H,则最后一个依然是H或D,此时如果成立,那么依然属于[i-1][j]或[i][j-1]的情况。

    所以推导出此递推关系。

    #include<iostream>
    using namespace std;
    int main()
    {
    	__int64 dp[25][25];
    	int n,m;
    	dp[1][2]=0;
    	for(int i=1;i<=20;i++)
    		dp[i][1]=i;
    	for(int i=2;i<=20;i++)
    		for(int j=2;j<=20;j++)
    		{
    			if(i>=j)
    				dp[i][j]=dp[i-1][j]+dp[i][j-1];
    			else dp[i][j]=0;
    		}
    	while(scanf("%d %d",&n,&m)==2)
    	{
    		printf("%I64d\n",dp[n][m]);
    	}
    	return 0;
    }
    
  • 相关阅读:
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    每日总结
    Windows邮件添加QQ邮箱
  • 原文地址:https://www.cnblogs.com/nanke/p/2171787.html
Copyright © 2011-2022 走看看