P6771

这是一道很明显的 dp 问题。

首先 dp 最重要的三要素是:动态表示、动态转移、初始状态。

只要这三个要素搞明白了,基本就能把这题做出来了。

solution

让我们来看看这题的动态表示、动态转移和初始状态。

状态表示

\(dp_{i,j}\) 表示用前 \(i\) 种方块是否可以拼成高度 \(j\)

状态转移

\(
dp_{i,j}=
\begin{cases}\\\\\\\\\\\end{cases}
\begin{matrix}
dp_{i-1,j} && \text{用}0\text{块第}i\text{种方块}\\
dp_{i-1,j-h_{i}} && \text{用}1\text{块第}i\text{种方块}\\
&\ldots&\\
dp_{i-1,j-k\times h_{i}} && \text{用}k\text{块第i种方块}\\
&\ldots&\\
dp_{i-1,j-c_{i}\times h_{i}} && \text{用}c_{i}\text{块第}i\text{种方块}\\
\end{matrix}\)

\(
dp_{i,j}|=dp{i,j-k\times h_{i}};(h_{i}\le j\le a_{i}, 1\le k\le c_i)
\)

初始状态

\(dp_{i,j}=\mathrm{false};dp_{0,0}=\mathrm{true}\)

最后物品维可以直接省掉,即:

\(dp_{j}|=dp_{j-k\times h_{i}};(h_{i}\le j\le a_{i}, 1\le k\le c_i)\)

那么写出这三要素就很容易写出代码了

code

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<string>
#define line cout << endl
using namespace std; const int NR = 405;
struct node {
int h, a, c;
};
node e[NR];
int n;
bool dp[40005]; bool cmp (node x, node y) {
return x.a < y.a;
} int main () {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> e[i].h >> e[i].a >> e[i].c;
dp[0] = true;
sort (e + 1, e + n + 1, cmp);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= e[i].c; j++) {
for (int k = e[i].a; k >= e[i].h; k--) {
dp[k] |= dp[k - e[i].h];//动态转移方程
}
}
}
for (int i = e[n].a; i >= 0; i--) {
if (dp[i]) {
cout << i << endl;
break;
}
}
return 0;
}

【题解】「P6771」[USACO05MAR]Space Elevator 太空电梯的更多相关文章

  1. BZOJ 1739: [Usaco2005 mar]Space Elevator 太空电梯

    题目 1739: [Usaco2005 mar]Space Elevator 太空电梯 Time Limit: 5 Sec  Memory Limit: 64 MB Description The c ...

  2. BZOJ1739: [Usaco2005 mar]Space Elevator 太空电梯

    n<=400个东西,每个东西有高度<=100,这种东西在堆放过程中不得超过的最大高度<=40000,以及每个东西的个数<=10,求最高能堆多高. 算了下背包复杂度不太对然后开了 ...

  3. 题解 「HDU6403」卡片游戏

    link Description 桌面上摊开着一些卡牌,这是她平时很爱玩的一个游戏.如今卡牌还在,她却不在我身边.不知不觉,我翻开了卡牌,回忆起了当时一起玩卡牌的那段时间. 每张卡牌的正面与反面都各有 ...

  4. 题解 「SCOI2016」萌萌哒

    link Description 一个长度为 $ n $ 的大数,用 $ S_1S_2S_3 \ldots S_n $表示,其中 $ S_i $ 表示数的第 $ i $ 位,$ S_1 $ 是数的最高 ...

  5. 题解 「SDOI2017」硬币游戏

    题目传送门 Description 周末同学们非常无聊,有人提议,咱们扔硬币玩吧,谁扔的硬币正面次数多谁胜利. 大家纷纷觉得这个游戏非常符合同学们的特色,但只是扔硬币实在是太单调了. 同学们觉得要加强 ...

  6. 题解 「ZJOI2018」历史

    题目传送门 Description 九条可怜是一个热爱阅读的女孩子. 这段时间,她看了一本非常有趣的小说,这本小说的架空世界引起了她的兴趣. 这个世界有 \(n\) 个城市,这 \(n\) 个城市被恰 ...

  7. 题解 「BZOJ3636」教义问答手册

    题目传送门 Description 作为泉岭精神的缔造者.信奉者.捍卫者.传承者,Pear决定印制一些教义问答手册,以满足泉岭精神日益增多的信徒.Pear收集了一些有关的诗选.语录,其中部分内容摘录在 ...

  8. 题解「BZOJ4310」跳蚤

    题目传送门 Description 现在有一个长度为 \(n\) 的字符串,将其划分为 \(k\) 段,使得这 \(k\) 段每一段的字典序最大子串中字典序最大的字符串字典序尽量小.求出这个字符串. ...

  9. 题解 「BZOJ2137」submultiple

    题目传送门 题目大意 给出 \(M,k\) ,求出 \[\sum_{x|M}\sigma(x)^k \] 给出 \(P_i\),满足 \(n=\prod_{i=1}^{n}a_i^{P_i}\),其中 ...

随机推荐

  1. sklearn.tree.DecisionTreeClassifier 详细说明

    sklearn.tree.DecisionTreeClassifier()函数用于构建决策树,默认使用CART算法,现对该函数参数进行说明,参考的是scikit-learn 0.20.3版本.     ...

  2. centos7下做内存盘的方法

    在找这个资料的时候,基本没几个能用的或者过时了的,或者是换了概念,做的不是需要的那种盘,只有少数文章有提到关键部分应该怎么去操作,现在还是自己总结一下 内存盘tmpfs和ramdisk的区别 这个在网 ...

  3. Spring扩展之二:ApplicationListener

    1.介绍 用于监听应用程序事件的接口. 子接口:GenericApplicationListener,SmartApplicationListener. 通过ApplicationEvent类和App ...

  4. Spring Cloud注册中心之Consul

    Consul简介 Consul是HashiCorp公司使用Golang语言开发的一中多服务解决方案工具,相比于其他服务注册中心来说,Consul的功能更为强大,丰富,其中最基本的功能包含下面几点(翻译 ...

  5. 20201124-web方向-命令执行-RCE

    参考链接:https://www.cnblogs.com/wangtanzhi/p/12311239.html RCE: 英文全称:remote command / code execcute 分别为 ...

  6. SpringIOC的高级特性

    目录 1. lazy-Init延迟加载 1.1 XML方式开启延迟加载: 1.2 注解开启延迟加载: 1.3全局配置--default-lazy-init="": 应用场景: 2. ...

  7. 你了解ABBYY FineReader 14么?

    有没有一款是能够同时处理纸质文档和个类型PDF的一站式解决方案?答案是肯定的,ABBYY FineReader 14集合了强大的光学字符识别(OCR)以及 PDF 查看和编辑功能.不仅能够高效识别图片 ...

  8. 使用FL Studio来制作停顿的效果

    停顿效果是一种在音乐创作中非常常用的音效,它能起到缓冲的作用,而且能使这段旋律更具节奏感,在比较激情的歌曲中尤为常见.例如知名歌手王力宏演唱的<火力全开>中就使用了停顿效果,为歌曲加了不少 ...

  9. Ubuntu无法telnet

    1.Ubuntu无法telnet的原因 (1)/etc/hosts被修改过 (2)防火墙没有关闭 (3)没有安装相关服务 (4)/etc/inetd.conf文件没有telnet相关内容 2.解决办法 ...

  10. 利用css3和js实现旋转木马图片小demo

    先看效果图: 上源码 html代码 <!DOCTYPE html> <html lang="en"> <head> <meta chars ...