ZR#998
ZR#998
解法:
先把所有物品按照拿走的时间从小到大排序,拿走的时间相同就按照放上去的时间从大到小。那么一件物品上方的物品就一定会在它的前面。
考虑 $ dp $ ,设 $ f[i][j] $ 表示 $ i $ 以及 $ i $ 上面物品在所有时刻中最大重量为 $ j $ 时的最大收益。
转移的时候,我们需要枚举所有 $ i $ 上面的物品,维护一个 $ g[i] $ 表示时刻 $ i $ 之前物品的最大收益是多少。然后直接转移就好了。
CODE:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define LL long long
#define N 100010
struct Node {
int in,out;
int w,s,v;
inline bool operator < (const Node &x) const {
if(in != x.in) return in < x.in;
else return out > x.out;
}
} a[N];
int f[1010][2010],n,ans,s;
int main() {
scanf("%d%d",&n,&s);
for(int i = 1 ; i <= n ; i++)
scanf("%d%d%d%d%d",&a[i].in,&a[i].out,&a[i].w,&a[i].s,&a[i].v);
sort(a + 1,a + n + 1);
for(int i = 1 ; i <= n ; i++) {
int u = min(s,a[i].s);
for(int j = 0 ; j <= u ; j++) {
f[i][j] = a[i].v;
int sum = 0;
for(int k = i - 1 ; k >= 1 ; k--) {
if(a[k].out >= a[i].out) f[i][j] = max(f[i][j],f[k][j + a[i].w] + a[i].v + sum);
if(a[k].out <= a[i].in && a[k].s <= j + a[i].w) sum += a[k].v;
}
ans = max(ans,f[i][j]);
}
}
printf("%d \n",ans);
//system("pause");
return 0;
}
补充,因为写完题解就被叉了,所以补一发改过后的。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define LL long long
#define N 1010
struct bag {
int in, out;
int w, s, v;
} d[N];
int n,S,f[N][N],g[N][N];
inline bool cmp(bag a, bag b) {
if (a.out == b.out)return a.in > b.in;
else return a.out < b.out;
}
int main() {
scanf("%d%d",&n,&S);
for(int i = 1 ; i <= n ; i++)
scanf("%d%d%d%d%d",&d[i].in,&d[i].out,&d[i].w,&d[i].s,&d[i].v);
d[0].out = 2 * n + 1,d[0].s = S;
sort(d,d + n + 1,cmp);
for(int i = 0 ; i <= n ; i++) {
int j = 0, t = min(d[i].s, S - d[i].w);
memset(g,0,sizeof(g));
while(d[j].out <= d[i].in) j++;
for(int k = d[i].in + 1 ; k <= d[i].out ; k++) {
memcpy(g[k],g[k-1],sizeof(g[k]));
while(j < i && d[j].out == k) {
if(d[j].in < d[i].in) {
j++;
continue;
}
for(int l = 0 ; l <= t ; l++)
g[k][l] = max(g[k][l], g[d[j].in][l] + f[j][l]);
j++;
}
}
for(int k = 0 ; k <= t ; k++)
f[i][k + d[i].w] = g[d[i].out][k] + d[i].v;
for(int k = 1 ; k <= S ; k++)
f[i][k] = max(f[i][k], f[i][k - 1]);
}
printf("%d\n", f[n][S]);
//system("pause");
return 0;
}
ZR#998的更多相关文章
- NYOJ 998
这道题是欧拉函数的使用,这里简要介绍下欧拉函数. 欧拉函数定义为:对于正整数n,欧拉函数是指不超过n且与n互质的正整数的个数. 欧拉函数的性质:1.设n = p1a1p2a2p3a3p4a4...pk ...
- labview出现系统998错误
1.环境:xp,labview2015, 2.经过:初始状态正常,系统需要运行2016的打包的程序,运行不了,后下载了一个2016打包后的程序,点击安装,未提示异常.桌面添加了快捷方式,点击快捷方式, ...
- 关于python最大递归深度 - 998
今天LeetCode的时候暴力求解233 问题: 给定一个整数 n,计算所有小于等于 n 的非负数中数字1出现的个数. 例如: 给定 n = 13, 返回 6,因为数字1出现在下数中出现:1,10,1 ...
- 仓位 001 998 AUFNAHME不存在(L9009)
测试做一个物料库存561初始化时,库位是上启用了WM的.提示“C01 998 AUFNAHME 不存在”,998 库存余额的初始条目 是缺省的存储类型.用LS25在正式系统中,CO1 998下有AUF ...
- cogs 998. [東方S2] 帕秋莉·诺蕾姬
二次联通门 : cogs 998. [東方S2] 帕秋莉·诺蕾姬 交上去后发现自己没上榜 就想着加点黑科技 把循环展开一下 结果WA了.. 万恶的姆Q /* cogs 998. [東方S2] 帕秋莉· ...
- ZR#1005
ZR#1005 解法: 题解给了一个建图跑最短路的做法,但好像没有必要,因为 $ m $ 没有用,所以直接上完全背包就行了. CODE: #include<iostream> #inclu ...
- ZR#1004
ZR#1004 解法: 对于 $ (x^2 + y)^2 \equiv (x^2 - y)^2 + 1 \pmod p $ 化简并整理得 $ 4x^2y \equiv 1 \pmod p $ 即 $ ...
- ZR#1009
ZR#1009 解法: 因为无敌的SR给了一个大暴力算法,所以通过打表发现了了一些神奇的性质,即第一行和第一列的对应位置数值相等. 我们可以通过手算得出 $ F(n) = \frac{n(n + 1) ...
- ZR#1008
ZR#1008 解法: 直接预处理出来执行完一个完整的串可以到达的位置,然后算出重复的次数直接乘在坐标上,最后处理一下余下的部分就行了. CODE: #include<iostream> ...
随机推荐
- SQL Server邮件标识点
<br>---换行  :---空格 <H1></H1>---标题 --定义表格格式 N'<table border="1" ...
- IO中断
>>>io的中断编程 以上例程会有什么问题呢? 注意:CPU内部寄存器
- 弹性布局flex 介绍
摘自:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模 ...
- node.js 微信开发2-消息回复、token获取、自定义菜单
项目结构 >config/wechat.json 微信公众号的配置文件 >controllers/oauth.js 微信网页授权接口(下一篇再细讲讲) >controllers/we ...
- unity图片保留周边,中间延伸
1.先把图片切割,类似下面这样的 2.然后在使用的时候(选择图片类型的时候选择sliced)
- Haddop完全分布式集群搭建
hadoop完全分布式搭建 建议(遇到的坑): 如果自己用的操作系统就是linux,我本身是deepin系统,装了两台虚拟机,结果,用户名没有配置,导致启动不了,因为hadoop的master节点启动 ...
- java--分析简单java类与反射的联系
分析简单java类与反射的联系 web对反射的操作支持 在JSP之中有一种技术--javaBean.而且在jsp里面也配套有相应的操作方式,javaBean的核心在于简单java类,于是下面演示此操作 ...
- 关于MQ的几件小事(二)如何保证消息队列的高可用
1.RabbitMQ的高可用 RabbitMQ基于主从模式实现高可用.RabbitMQ有三种模式:单机模式,普通集群模式,镜像集群模式. (1)单机模式: 单机模式就是demo级别的,生产中不会有人使 ...
- java项目中注解使用——整理
文章:@Mapper注解的使用 地址:https://blog.csdn.net/weixin_39666581/article/details/81057385 @Mapper注解的的作用 1:为了 ...
- 【转】angular使用代理解决跨域
原文:https://www.cnblogs.com/sghy/p/9111293.html ----------------------------------------------------- ...