题目链接:http://codeforces.com/problemset/problem/478/D

题意:

  给你r个红方块和g个绿方块,让你用这些方块堆一个塔。

  最高层有1个方块,每往下一层块数+1,同时要保证每层中的方块都是同一种颜色。

  如图:

  

  问你在塔的高度最高的前提下,堆出塔的方案数。

题解:

  假设塔最高能堆d层,则:

    d*(d+1)/2 <= r+g

  解得:

    d = floor((-1+sqrt(1+8*(r+g)))/2)

    并且d最大不超过900。

  表示状态:

    dp[i][j] = numbers

    表示已经堆了最上面的i层,用了j个红方块,此时的方法数。

  

  找出答案:

    ans = ∑ dp[d][max(0,d*(d+1)/2-g) to r]

    因为最终还要保证用了绿方块的个数 <= g,所以枚举i至少要从d*(d+1)/2-g开始。

  如何转移:

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

    从上往下数第i层可能全用绿色,或全用红色

  边界条件:

    dp[0][0] = 1

  另外要用滚动数组,否则会MLE。

AC Code:

 #include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX_D 900
#define MAX_R 200005
#define MOD 1000000007
#define EPS 1e-5 using namespace std; int r,g,d;
int dp[][MAX_R]; int main()
{
cin>>r>>g;
d=floor((-1.0+sqrt(1.0+8.0*(r+g))+EPS)/2.0);
memset(dp,,sizeof(dp));
dp[][]=;
for(int i=;i<=d;i++)
{
for(int j=;j<=r;j++)
{
dp[i&][j]=dp[(i-)&][j];
if(j-i>=) dp[i&][j]+=dp[(i-)&][j-i];
dp[i&][j]%=MOD;
}
}
int ans=;
for(int i=max(,d*(d+)/-g);i<=r;i++)
{
ans=(ans+dp[d&][i])%MOD;
}
cout<<ans<<endl;
}

Codeforces 478D Red-Green Towers:dp的更多相关文章

  1. Codeforces 358D Dima and Hares:dp【只考虑相邻元素】

    题目链接:http://codeforces.com/problemset/problem/358/D 题意: 有n个物品A[i]摆成一排,你要按照某一个顺序将它们全部取走. 其中,取走A[i]的收益 ...

  2. Codeforces 294B Shaass and Bookshelf:dp

    题目链接:http://codeforces.com/problemset/problem/294/B 题意: 有n本书,每本书的厚度为t[i],宽度为w[i] (1<=t[i]<=2, ...

  3. Codeforces 459E Pashmak and Graph:dp + 贪心

    题目链接:http://codeforces.com/problemset/problem/459/E 题意: 给你一个有向图,每条边有边权. 让你找出一条路径,使得这条路径上的边权严格递增. 问你这 ...

  4. Codeforces 163A Substring and Subsequence:dp【子串与子序列匹配】

    题目链接:http://codeforces.com/problemset/problem/163/A 题意: 给你两个字符串a,b,问你有多少对"(a的子串,b的子序列)"可以匹 ...

  5. BZOJ 2021 [Usaco2010 Jan]Cheese Towers:dp + 贪心

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2021 题意: John要建一个奶酪塔,高度最大为m. 他有n种奶酪.第i种高度为h[i]( ...

  6. Codeforces 893E Counting Arrays:dp + 线性筛 + 分解质因数 + 组合数结论

    题目链接:http://codeforces.com/problemset/problem/893/E 题意: 共q组数据(q <= 10^5),每组数据给定x,y(x,y <= 10^6 ...

  7. codeforces 277.5 div2 F:组合计数类dp

    题目大意: 求一个 n*n的 (0,1)矩阵,每行每列都只有两个1 的方案数 且该矩阵的前m行已知 分析: 这个题跟牡丹江区域赛的D题有些类似,都是有关矩阵的行列的覆盖问题 牡丹江D是求概率,这个题是 ...

  8. codeforces 597C (树状数组+DP)

    题目链接:http://codeforces.com/contest/597/problem/C 思路:dp[i][j]表示长度为i,以j结尾的上升子序列,则有dp[i][j]= ∑dp[i-1][k ...

  9. codeforces 161D Distance in Tree 树形dp

    题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...

随机推荐

  1. cache和内存

    CPU与内存 北桥:主桥,主要用来处理高速信号,负责与处理器的联系:CPU通过FSB前端总线来访问内存控制器. 南桥:IO桥,负责IO总线之间的通信,比如PCI总线.SATA.USB等,可以连接光驱. ...

  2. MongoDB入门学习(1)

    什么是MongoDB ? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用提供 ...

  3. NHibernate 数据查询之Linto to NHibernate (第八篇)

    NHibernate 数据查询之Linto to NHibernate (第八篇) 刚学NHibernate的时候觉得,HQL挺好用的,但是终归没有与其他技术 相关联,只有NHibernate用到,一 ...

  4. bzoj3174【TJOI2013】解救小矮人

    3174: [Tjoi2013]解救小矮人 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 573  Solved: 293 [Submit][Stat ...

  5. jfreechart折线图 demo

    public class ChartUtil { public static ChartUtil chartUtil; private RoomViewsDataService roomViewsDa ...

  6. java栈的最大深度?

    1. 概述 某公司面试,总监大叔过来,问了图论及栈的最大深度,然后^_^ 一直记着,今天搞一下 2. 代码 package com.goodfan.test; public class JavaSta ...

  7. Windows server2008 搭建ASP接口訪问连接oracle数据库全过程记录

    真的是太不easy了,曾经的时候在window server 2003上面搭建了一套asp+oracle的接口系统.就费了好大的劲儿,事实上那会迷迷瞪瞪的也不知道怎么的就弄好了,也懒得管了.OK,从昨 ...

  8. Lumen开发:lumen源码解读之初始化(1)——app实例

    版权声明:本文为博主原创文章,未经博主允许不得转载. 有些注释来着原文的百度翻译,可以有些难理解或者奇怪,我后面会根据自己的理解做调整的哈!!!不喜勿喷,层主英语不过关... 先来看看入口文件publ ...

  9. 在Linux先显示文件

    cat:从第一行开始显示文件内容. tac:从最后一行开始显示内容. nl:显示的时候带行号. more:一页一页显示. less:同more,可以向上翻页. head:显示文件前几行. head - ...

  10. 软件测试人员需要精通的开发语言(3)--- Linux

    Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.不得不说下,中国产的红旗系统,牛的一逼,造价很贵,但具体何用处估 ...