[补题][Codeforces478D]Red-Green Towers(DP)
题目链接
http://codeforces.com/problemset/problem/478/D
题意
叠放塔:有红、绿两种色块。从第一层开始,第一层1块,第二层2块,第i层i块。
要求每一层只能用同一种颜色的块。
输入:红块和绿块数目
输出;能叠放出的最高高度h的塔的种数。定义塔某一层的颜色不同,则为不同种。
题解
状态表示
dp[i][j]表示i层的塔,使用了j个红块
转移方程
dp[i][j]=dp[i-1][j]+dp[i-1][j-i],当j>=i
dp[i][j]=dp[i-1][j],当j<i
需要get的点
- 根据给出的数据范围,最高只有900左右,找到h。 一定满足h可以搭出来怎么证?
- dp只需要两维,因为当塔的高度h固定,则给出使用的红块数,则使用的绿块数=h-红块数。
- 计算当前层块数时,控制红块至少大于等于总块数-已有绿块数,这样保证了绿块是够的。
- 初始化:dp[0][0]=1即可 ?
- 滚动数组否则爆内存
代码
package Exam;
import java.util.Scanner;
public class FirstTest {
public static void main(String args[]) {
Scanner in=new Scanner(System.in);
int r=in.nextInt();
int g=in.nextInt();
int MAXH=(int) Math.floor(Math.sqrt(2*(r+g))) ;
int MAXR=(int) 2e5;
int MOD=(int)1e9+7;
int h=MAXH;
while(h*(h+1)/2>r+g) {
--h;
}
int[][] dp=new int[2][MAXR];
dp[0][0]=1;
for(int i=1;i<=h;++i) {
for(int j=0;j<=r;++j) {
if(j-i>=0) {
dp[i&1][j]=((dp[(i-1)&1][j])%MOD+(dp[(i-1)&1][j-i])%MOD)%MOD;
}
else {
dp[i&1][j]=(dp[(i-1)&1][j])%MOD;
}
}
}
int ans=0;
for(int i=Math.max(0,h*(h+1)/2-g);i<=r;++i) {
ans+=dp[h&1][i];
}
System.out.println(ans);
}
}
[补题][Codeforces478D]Red-Green Towers(DP)的更多相关文章
- 2018 HDU多校第四场赛后补题
2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...
- 2018 HDU多校第三场赛后补题
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
- 4.30-5.1cf补题
//yy:拒绝转载!!! 悄悄告诉你,做题累了,去打两把斗地主就能恢复了喔~~~ //yy:可是我不会斗地主吖("'▽'") ~~~那就听两遍小苹果嘛~~~ 五一假期除了花时间建模 ...
- ICPC南京补题
由于缺的题目比较多,竟然高达3题,所以再写一篇补题的博客 Lpl and Energy-saving Lamps During tea-drinking, princess, amongst othe ...
- Codeforces VP/补题小记 (持续填坑)
Codeforces VP/补题小记 1149 C. Tree Generator 给你一棵树的括号序列,每次交换两个括号,维护每次交换之后的直径. 考虑括号序列维护树的路径信息和,是将左括号看做 ...
- CSP-S2019 赛前补题
前言 该打的比赛也打完了,每一场打得并不是很理想,所以就没写赛后总结了.最后再把每一场的比赛补一下,也算给自己一个交代吧. 牛客CSP-S提高组赛前集训营6 考试 100 + 30 + 0 = 130 ...
- 【春训团队赛第四场】补题 | MST上倍增 | LCA | DAG上最长路 | 思维 | 素数筛 | 找规律 | 计几 | 背包 | 并查集
春训团队赛第四场 ID A B C D E F G H I J K L M AC O O O O O O O O O 补题 ? ? O O 传送门 题目链接(CF Gym102021) 题解链接(pd ...
- 【补题记录】ZJU-ICPC Summer Training 2020 部分补题记录
补题地址:https://zjusummer.contest.codeforces.com/ Contents ZJU-ICPC Summer 2020 Contest 1 by Group A Pr ...
- 【JOISC 2020 补题记录】
目录 Day 1 Building 4 Hamburg Steak Sweeping Day 2 Chameleon's Love Making Friends on Joitter is Fun R ...
随机推荐
- 微信小程序扫码解析小程序码
通过微信扫小程序码,跳转到应用小程序内, 如何解析小程序码的参数呢? 一般小程序码会跳转到设置的页面,如首页, 可以直接跳转到小程序首页,然后解析小程序携带的参数,再打开某个页面. (小程序码的路径要 ...
- Ubuntu 18.04 安装、配置和美化
本文章修改自inkss的博文 为什么要修改原文? 本来我是想自己写这么一篇的,但是没想到在百度一搜,居然一篇好文.我之前没看到,真是可惜. 这篇文章主要是帮助我记录一些东西,如题. 原文虽然不错,但是 ...
- GUAVA-ListenableFuture实现回调
随着软件开发的不断进步,在实际的开发应用中,可能一次请求需要查询若干次数据库或者调用若干次第三方,按照传统的串行执行的话,会大大增加响应时间,无法满足业务需求,更无法满足用户迫切需要响应迅速的愿望.对 ...
- ES6中的变量的解构赋值, 解放我们的双手,实现变量的批量赋值
ES6--变量的解构赋值 引言 正文 一.数组的解构赋值 解构失败 不完全解构 默认值 二.对象的解构赋值 三.字符串的解构赋值 结束语 引言 变量的解构赋值, 听起来很复杂, 简单点说可以理解成批量 ...
- springMVC入门(一)------springMVC基本概念与安装
springMVC简介 springMVC是一个基于MVC的web框架,属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面. springMVC安装 本例中使用 ...
- golang学习笔记:Interface类型断言详情
原文链接:https://www.2cto.com/kf/201712/703563.html 1. 用于判断变量类型 demo如下: switch t := var.(type){ case str ...
- Tensorflow2(一)深度学习基础和tf.keras
代码和其他资料在 github 一.tf.keras概述 首先利用tf.keras实现一个简单的线性回归,如 \(f(x) = ax + b\),其中 \(x\) 代表学历,\(f(x)\) 代表收入 ...
- docker 创建mysql和redis
1 镜像加速 创建docker 目录 sudo mkdir -p /etc/docker 镜像加速: sudo tee /etc/docker/daemon.json <<-'E ...
- 读取手机中的联系人信息(android.provider.ContactsContract)
本篇开始讲如何从Android中得到本机联系人的信息.由于Android较快的版本升级,部分API已经发生了变化.本篇探究的通过ContentProvider机制获取联系人的API从Android2. ...
- PAT-B1009 说反话 - 字符串反转
1009 说反话 (20分) 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串.字符串由若干单词和若干空格组 ...