zoukankan      html  css  js  c++  java
  • 2019-2020 ACM-ICPC Latin American Regional Programming Contest Finished F

    #include<map>
    #include<queue>
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    
    int read()
    {
    	int res=0,ch,flag=0;
    	if((ch=getchar())=='-')             //判断正负
    		flag=1;
    	else if(ch>='0'&&ch<='9')           //得到完整的数
    		res=ch-'0';
    	while((ch=getchar())>='0'&&ch<='9')
    		res=res*10+ch-'0';
    	return flag?-res:res;
    }
    const ll mod = 1e9+7;
    const int N = 5000+10;
    int n, m;
    ll dp[N][N];
    ll sum2[N];
    ll sum1[N];
    void solve()
    {
    	int s=read(),b=read();
    	b-=s;
    	//底部长度为i
    	//dp[i,j]=dp[i,j-i]+2*dp[i-1,j-(i-1)]+3*dp[i-2,j-(i-2)]+...+
    	//
    	for(int i=1; i<=s; ++i)
    		for(int j=0; j<=b; ++j)
    		{
    			//剩下的
    
    			sum2[j]=(sum2[j]+sum1[j])%mod;
    			//底部为i,还有j
    			if(j==0)
    				dp[i][j]=1;
    			else
    				//底部是i,剩余j块儿
    				//也就是 除了底部的话,剩下的块是j
    				//那么也就是说  往上的j块儿,随便放,只要符合条件就行
    				dp[i][j]=sum2[j];
    
    			//总数是i+j
    			//这里累加到总的方案数里的i 都是 小于s的,
    			//在i=i+1时,当前加到里面的所有的方案的i 都是小于 此时的i的,那么也就成立了
    			sum1[j+i]=(dp[i][j]+sum1[j+i])%mod;
    		}
    
    	cout<<dp[s][b]<<endl;
    }
    int main()
    {
    	int t=1;
    	while(t--)
    		solve();
    	return 0;
    }
    
  • 相关阅读:
    只允许在input框输入文字,不能输入数字和其他字符
    阻止用户在input框输入数字
    centos 7.2安装和配置MongoDB
    Python基础
    Python小练习008
    Python小练习007
    Python小练习006
    Python错误集锦
    Python和MongoDB
    MongoDB笔记
  • 原文地址:https://www.cnblogs.com/QingyuYYYYY/p/12665048.html
Copyright © 2011-2022 走看看