题目链接

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)的更多相关文章

  1. 2018 HDU多校第四场赛后补题

    2018 HDU多校第四场赛后补题 自己学校出的毒瘤场..吃枣药丸 hdu中的题号是6332 - 6343. K. Expression in Memories 题意: 判断一个简化版的算术表达式是否 ...

  2. 2018 HDU多校第三场赛后补题

    2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...

  3. 4.30-5.1cf补题

    //yy:拒绝转载!!! 悄悄告诉你,做题累了,去打两把斗地主就能恢复了喔~~~ //yy:可是我不会斗地主吖("'▽'") ~~~那就听两遍小苹果嘛~~~ 五一假期除了花时间建模 ...

  4. ICPC南京补题

    由于缺的题目比较多,竟然高达3题,所以再写一篇补题的博客 Lpl and Energy-saving Lamps During tea-drinking, princess, amongst othe ...

  5. Codeforces VP/补题小记 (持续填坑)

    Codeforces VP/补题小记 1149 C. Tree Generator 给你一棵树的括号序列,每次交换两个括号,维护每次交换之后的直径. ​ 考虑括号序列维护树的路径信息和,是将左括号看做 ...

  6. CSP-S2019 赛前补题

    前言 该打的比赛也打完了,每一场打得并不是很理想,所以就没写赛后总结了.最后再把每一场的比赛补一下,也算给自己一个交代吧. 牛客CSP-S提高组赛前集训营6 考试 100 + 30 + 0 = 130 ...

  7. 【春训团队赛第四场】补题 | 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 ...

  8. 【补题记录】ZJU-ICPC Summer Training 2020 部分补题记录

    补题地址:https://zjusummer.contest.codeforces.com/ Contents ZJU-ICPC Summer 2020 Contest 1 by Group A Pr ...

  9. 【JOISC 2020 补题记录】

    目录 Day 1 Building 4 Hamburg Steak Sweeping Day 2 Chameleon's Love Making Friends on Joitter is Fun R ...

随机推荐

  1. Selenium数据驱动测试模型和实例

    模块驱动的模型虽然解决了脚本的重复问题,但是需要测试不同数据的用例时,模块驱动的方式就不很适合了. 数据驱动就是数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变. 装载数据的方式可以是列表. ...

  2. 设计模式:桥接模式及代码示例、桥接模式在jdbc中的体现、注意事项

    0.背景 加入一个手机分为多种款式,不同款式分为不同品牌.这些详细分类下分别进行操作. 如果传统做法,需要将手机,分为不同的子类,再继续分,基本属于一个庞大的多叉树,然后每个叶子节点进行相同名称.但是 ...

  3. 学长小清新题表之UOJ 180.实验室外的攻防战

    学长小清新题表之UOJ 180.实验室外的攻防战 题目描述 时针指向午夜十二点,约定的日子--\(2\)月\(28\)日终于到来了.随着一声枪响,伏特跳蚤国王率领着他的跳蚤大军们包围了 \(picks ...

  4. SpringBoot---SpringMVC关于拦截器的一些问题总结

    SpringBoot---SpringMVC关于拦截器的一些问题总结 环境: IDEA :2020.1 Maven:3.5.6 SpringBoot: 2.3.2 1.直接在地址栏输入 http:// ...

  5. Burp Suite 爆破high级别的DVWA

    Step1:调整 DVWA 为 high 级别,然后点击进入 Brute Force . Step2:输入正确的账号,和一个假的密码,使用BP进行拦包. Step3:Ctrl+i 将拦到的包发送到 I ...

  6. 更换IntelliJ Idea的Terminal为git_home/bin/sh.exe命令端程序

    idea中默认的terminal形式: 1.在IDEA中,打开settings,设置相应的bash路径 settings–>Tools–>Terminal–>Shell path:C ...

  7. Oracle和Mysql分页的区别

    一.Mysql使用limit分页 select * from stu limit m, n; //m = (startPage-1)*pageSize,n = pageSize PS: (1)第一个参 ...

  8. SparkStreaming概述

    Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量的.具备容错机制的实时流数据的处理. ◆ 支持从多种数据源获取数据,包括Kafka.Flume.Twitter.Zer ...

  9. Docker-Docker容器跨主机通信

    Docker默认的网络环境下,单台主机上的Docker容器可以通过docker0网桥直接通信,而不同主机上的Docker容器之间只能通过在主机上做端口映射进行通信.这种端口映射方式对很多集群应用来说极 ...

  10. Paillier同态加密实现

    一.C++(该方案只实现了加密以及解密) 1.git clone https://github.com/klei0229/paillier.git 2.下载GMP与NTL包: 下载版本以及操作参见ht ...