ATC DP X - Tower

https://atcoder.jp/contests/dp/tasks/dp_x

如果s2-w1>s1-w2,即s2+w2>s1+w1,也就是s2放在底下上面留出的剩余质量会更多,显然更好。

重点是为什么要排序?排序可以保证枚举的正确性,因为这样的顺序使得物品都是具备一定要放在前面的砖底下的性质。这样就只需要确定性的放在底下就好了。

那么转移就变成了 dp[j+w]=max(dp[j+w],dp[j]+brick[i].v)dp[j+w] = max(dp[j+w],dp[j]+brick[i].v)dp[j+w]=max(dp[j+w],dp[j]+brick[i].v)

这道dp中的特殊的地方是需要考虑顺序问题,普通的01背包是无所谓顺序的。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#include <set>
#include <unordered_map>
#include <cstring>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>using namespace std;
const int N = 1e3 + 100;
const int mod = 100000007;
typedef long long ll;
struct node {int s, w, v;
} brick[N];ll dp[11000000];bool cmp(node a, node b) {return a.w + a.s < b.w + b.s;
}int main() {int n;cin >> n;for (int i = 1; i <= n; i++) {cin >> brick[i].w >> brick[i].s >> brick[i].v;}sort(brick + 1, brick + n + 1, cmp);memset(dp, 0, sizeof(dp));for (int i = 1; i <= n; i++) {for (int j = brick[i].s; j >= 0; j--) {dp[j + brick[i].w] = max(dp[j + brick[i].w], dp[j] + brick[i].v);}}ll ans = 0;for (int i = 0; i <= 10000000; i++) {ans = max(ans, dp[i]);}cout << ans << endl;}

ATC DP X - Tower相关推荐

  1. ATC DP Q - Flowers

    ATC DP Q - Flowers https://atcoder.jp/contests/dp/tasks/dp_q 参考最长上升子序列,这样做事 O ( n 2 ) O(n^2) O(n2) 后 ...

  2. 2014_hangzhou_onsite

    4770 Lights Against Dudely 状态压缩+枚举 4771 Stealing Harry Potter's Precious 签到,压缩后直接BFS 4772 Zhuge Lian ...

  3. bzoj 1233 干草堆tower 优先队列优化dp

    https://www.lydsy.com/JudgeOnline/problem.php?id=1233 描述: 奶牛们讨厌黑暗. 为了调整牛棚顶的电灯的亮度,Bessie必须建一座干草堆使得她能够 ...

  4. HDU5886 Tower Defence 【两遍树形dp】【最长链预处理】

    题意:N个点的一棵带权树.切掉某条边的价值为切后两树直径中的最大值.求各个边切掉后的价值和(共N-1项). 解法一: 强行两遍dp,思路繁琐,维护东西较多: dis表示以i为根的子树的直径,dis2表 ...

  5. UVA437 巴比伦塔 The Tower of Babylon(矩形嵌套进阶版、DAG上DP、记忆化搜索)

    整理的算法模板合集: ACM模板 本题和基础的矩形覆盖差不多,只不过变成了三维的长方形. 因为每次转移的时候只有顶面的x和y会影响决策的进行,所以我们只需要用一个二元组(a,b)(a, b)(a,b) ...

  6. bzoj 1233: [Usaco2009Open]干草堆tower【dp+单调栈】

    参考:https://www.cnblogs.com/N-C-Derek/archive/2012/07/11/usaco_09_open_tower.html 虽然长得很像斜率优化,但是应该不算-- ...

  7. 【UVA 437】The Tower of Babylon(拓扑排序+DP,做法)

    [Solution] 接上一篇,在处理有向无环图的最长链问题的时候,可以在做拓扑排序的同时,一边做DP; 设f[i]表示第i个方块作为最上面的最高值; f[y]=max(f[y],f[x]+h[y]) ...

  8. 【HDU - 5886】Tower Defence(树的直径,思维,dp)

    题干: There was a civil war between two factions in Skyrim, a province of the Empire on the continent ...

  9. Uva 437 - The Tower of Babylon(DP)

    题目链接 https://vjudge.net/problem/UVA-437 [题意]        给定n种不同的立方体,每种立方体都有无穷多个,现在要用它们跌放在一起组成一个巴比伦塔,并且处在某 ...

最新文章

  1. python stm32-尝试一下使用Python来开发STM32
  2. 深入学习keepalived之预备工作--线程
  3. Mysql 中 delete 与 left join 的问题
  4. linux记录iptables日志,linux – 如何配置syslog.conf文件,在单独的文件中记录iptables消息?...
  5. C# 根据url获取文件流流
  6. Concept Drift(概念漂移)
  7. java基础学习_GUI_如何让Netbeans的东西Eclipse能访问、GUI(图形用户接口)_day25总结...
  8. 服务器远程ghost,神奇Ghost 轻松远程安装软件
  9. Fiddler抓取Chrome最新版HTTPS设置
  10. 【综合实训】图书管理系统——概要设计说明书
  11. java webservice是什么_WebService的基本概念:java webservice,什么是webservice
  12. batchsize太小的缺点随着batchsize逐渐增大的优缺点如何平衡batchsize的大小
  13. Docker、nvidia-container-toolkit安装与常用docker命令及docker镜像和容器的更新维护
  14. 苹果系统版本依次顺序_iphone所有型号上市顺序
  15. 内网穿透工具natcross2
  16. 计算机专业C语言编程学习重点:指针化难为易
  17. win10增大任务栏图标尺寸教程
  18. Load balancer does not have available server for client: wr-fac
  19. 新书推荐 |《AI安全之对抗样本入门》
  20. 计算机音乐我还是曾经那个少年,我还是曾经的那个少年什么歌曲?是谁唱的?求科普!...

热门文章

  1. sqlmap安装及简单使用实例
  2. 微型计算机原理及应用第二版课后答案李伯成,李伯成《微型计算机原理及应用+》完整课后习题答案.doc...
  3. MATLAB调用USB摄像头的过程记录
  4. 【研究生】论文该不该强制开放源代码?那个曾经硬刚LeCun的女学者这样说
  5. Skill: win10: 开机启动项管理配置
  6. fastadmin 常用操作
  7. Git使用详解之可视化工具TortoiseGit
  8. C语言程序设计谭浩强第五版复习梳理2
  9. 【Unity】VideoPlayer实现视频播放
  10. meteor构建app程序_在Meteor.js中构建Slack克隆:实时数据