Codeforces 478D Red-Green Towers:dp
题目链接: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的更多相关文章
- Codeforces 358D Dima and Hares:dp【只考虑相邻元素】
题目链接:http://codeforces.com/problemset/problem/358/D 题意: 有n个物品A[i]摆成一排,你要按照某一个顺序将它们全部取走. 其中,取走A[i]的收益 ...
- Codeforces 294B Shaass and Bookshelf:dp
题目链接:http://codeforces.com/problemset/problem/294/B 题意: 有n本书,每本书的厚度为t[i],宽度为w[i] (1<=t[i]<=2, ...
- Codeforces 459E Pashmak and Graph:dp + 贪心
题目链接:http://codeforces.com/problemset/problem/459/E 题意: 给你一个有向图,每条边有边权. 让你找出一条路径,使得这条路径上的边权严格递增. 问你这 ...
- Codeforces 163A Substring and Subsequence:dp【子串与子序列匹配】
题目链接:http://codeforces.com/problemset/problem/163/A 题意: 给你两个字符串a,b,问你有多少对"(a的子串,b的子序列)"可以匹 ...
- BZOJ 2021 [Usaco2010 Jan]Cheese Towers:dp + 贪心
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2021 题意: John要建一个奶酪塔,高度最大为m. 他有n种奶酪.第i种高度为h[i]( ...
- Codeforces 893E Counting Arrays:dp + 线性筛 + 分解质因数 + 组合数结论
题目链接:http://codeforces.com/problemset/problem/893/E 题意: 共q组数据(q <= 10^5),每组数据给定x,y(x,y <= 10^6 ...
- codeforces 277.5 div2 F:组合计数类dp
题目大意: 求一个 n*n的 (0,1)矩阵,每行每列都只有两个1 的方案数 且该矩阵的前m行已知 分析: 这个题跟牡丹江区域赛的D题有些类似,都是有关矩阵的行列的覆盖问题 牡丹江D是求概率,这个题是 ...
- codeforces 597C (树状数组+DP)
题目链接:http://codeforces.com/contest/597/problem/C 思路:dp[i][j]表示长度为i,以j结尾的上升子序列,则有dp[i][j]= ∑dp[i-1][k ...
- codeforces 161D Distance in Tree 树形dp
题目链接: http://codeforces.com/contest/161/problem/D D. Distance in Tree time limit per test 3 secondsm ...
随机推荐
- [译]NeHe教程 - 添加颜色
原文: Adding Colour 上一节我讲解了如何在屏幕显示三角形和四边形.本节会讲解如何上色.单色(Flat)顾名思义就是只能涂一种实心的颜色.平滑颜色(Smooth)可以在各个顶点混合三种颜色 ...
- Eval,Bind,<% %>,<%# %>和<%= %> 笔记
1.<% %>用来绑定后台代码 如: < % for(int i=0;i<100;i++) { Reaponse.Write(i.ToString()); } %> 2. ...
- Spring在注入bean异常时的替换
情形:需要把数据库1的连接池A注入到DAO中,但是如果数据库A的连接池实例化失败了整个项目也启动不了,这个时候希望用数据库2的连接池来替换. 这里没有想到什么好的解决方法,只是想到了工厂方法提供Bea ...
- ubuntu 及 postgredql 安装配置小坑摘录
ubuntu 16.04.1 安装 Ubuntu Server 16.04.1安装配置图解教程,按教程修改局域网static IP 开启sftp必须 解决SSH服务拒绝密码,之后才能欢乐地使用file ...
- 【Atheros】内核调试及网卡加载等问题小结
我做的其他很多工作就比较有针对性了,不是什么大众性的问题,比如加统计代码.实现自己的速率调整算法或者加一些自己的控制什么的,就不再单独介绍了,最后呢再罗列一些小问题,供参考. 1. 加载模块(执行wi ...
- php-fpm重启失败报错
php-fpm启动命令:/usr/local/php5/sbin/php-fpm 报错:ERROR: unable to bind listening socket for address '127. ...
- java getResourcesAsStream()如何获取WEB-INF下的文件流
getResourcesAsStream()来读取.properties文件,但是getResourcesAsStream()仅在java项目时能获取根目录的文件: 在web项目中,getResour ...
- CF#256(Div.2) A. Rewards
A. Rewards time limit per test 1 second memory limit per test 256 megabytes input standard input out ...
- 【BZOJ2422】Times 树状数组
[BZOJ2422]Times Description 小y作为一名资深的dotaer,对视野的控制有着深刻的研究.每个单位在一段特定的时间内会出现在小y的视野内,除此之外的时间都在小y看不到的地方. ...
- mysql数据库访问授权
1.进入MySQL服务器 d:\mysql\bin\> mysql -h localhost -u root; 2.赋予任何主机访问数据的权限 mysql> GRANT ALL PRIVI ...