设为首页 加入收藏

TOP

Codeforces 478D Red-Green Towers dp
2015-07-20 17:26:28 来源: 作者: 【 】 浏览:2
Tags:Codeforces 478D Red-Green Towers

题目链接:点击打开链接

题意:

给定r个红色正方体,g个绿色正方体。

要求搭建一个高度为n的塔。

对于高度为n的塔,第一层积木个数必须为n,第二层必须为n-1,依次类推,每层比下面那层少一个。

且同一层颜色必须相同。

问:

我们设最高能搭建的塔的高度为h,问有多少种方法能搭建出高度为h的塔。


思路:

从最顶层开始构造。

设dp[i][j]表示前i层花了j个红色木块的方法数

因为每层的个数固定,所以知道花费红色的个数,则就能马上算出花费绿色的个数。

而且对于最高的高度,是和颜色无关的,只和r+g有关,YY得证。

或者直接dp上去,当这一次的方案数是0时,则上一次就是最高的高度了。

前i层可以用滚动数组优化掉。


#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
        #include 
        
          template 
         
           inline bool rd(T &ret) { char c; int sgn; if(c=getchar(),c==EOF) return 0; while(c!='-'&&(c<'0'||c>'9')) c=getchar(); sgn=(c=='-')?-1:1; ret=(c=='-')?0:(c-'0'); while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0'); ret*=sgn; return 1; } template 
          
            inline void pt(T x) { if (x <0) { putchar('-'); x = -x; } if(x>9) pt(x/10); putchar(x%10+'0'); } using namespace std; typedef long long ll; #define N 200010 const ll mod = 1e9+7; ll r, g; ll dp[2][N]; // dp[cur][i][j]表示剩下i个红色,j=0最后一层是红色 bool vis[N]; vector
           
            G[2]; ll ok(){ int cur = 0; memset(dp[cur], 0, sizeof dp[cur]); dp[cur][0] = 1; ll sum = 0; for(ll i = 0; ; i ++){ cur ^= 1; sum += i; if( sum > r+g) break; memset(dp[cur], 0, sizeof dp[cur]); for(int j = 0; j <= r && j <= sum; j++) { if(sum - j + (i+1) <= g) dp[cur][j] += dp[cur^1][j], dp[cur][j] %= mod; if(j+(i+1)<=r) dp[cur][j+i+1] += dp[cur^1][j], dp[cur][j+i+1] %= mod; } } ll ans = 0; for(int i = 0; i <= r; i++){ ans += dp[cur][i]; if(ans >= mod) ans %= mod; } return ans; } int main() { while(cin>>r>>g){ cout<
            
             

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇uva 11354 - Bond(树链剖分) 下一篇HDU 1203 I NEED A OFFER!(dp)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·“我用Java 8”已成 (2025-12-26 11:19:54)
·下载 IntelliJ IDEA (2025-12-26 11:19:52)
·Java是什么?(通俗 (2025-12-26 11:19:49)
·雾里看花:真正意义 (2025-12-26 10:54:36)
·C++——模板(超详细 (2025-12-26 10:54:34)