题意:给定一些物品放置在承重为S的桌子上, 每个物品有5个属性,放置时间in,拿开时间out,重量w,承重s及放置后的收益v。而且后面放置上去的必须先拿开。。求一种合法的放置使得收益最大,输出收益。

思路:先对所有的物品按照out递增,out相同l递减的情况排序。

那么很容易想到dp。。

f[i][j]表示放置了第i个,还可承重j的最大收益(i本身还没算)。

把(in[i], out[i])看成线段

那么,等价于(in[i], out[i])之间找出最多不相交线段。

这个可以用记忆化搜索,当然也可以非递归。。

具体看代码应该比较容易懂吧。。
code:

 #include <bits/stdc++.h>
using namespace std;
struct oo{
int l, r, w, s, v;
void input(){
scanf("%d%d%d%d%d", &l, &r, &w, &s, &v);
}
bool operator<(const oo& p) const{
return r < p.r || (r == p.r && l > p.l);
}
} a[];
int n, s, f[][], tmp[];
void solve(){
a[] = (oo){, n*, , s, };
for (int i = ; i <= n; ++i) a[i].input();
sort(a, a + n + );
int cur, s1;
for (int i = ; i <= n; ++i)
for (int j = a[i].w; j <= s; ++j){
tmp[cur = a[i].l] = ;
s1 = min(j-a[i].w, a[i].s);
for (int k = ; k < i; ++k) if (a[k].l >= a[i].l){
for (;cur<a[k].r;)
++cur, tmp[cur] = tmp[cur-];
tmp[cur] = max(tmp[cur], tmp[a[k].l] + f[k][s1]);
}
f[i][j] = tmp[cur] + a[i].v;
}
cout << f[n][s] << endl;
} int main(){
// freopen("a.in", "r", stdin);
while (scanf("%d%d", &n, &s) != EOF){
solve();
}
}

codeforces 480D的更多相关文章

  1. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  2. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  3. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  4. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  5. CodeForces - 662A Gambling Nim

    http://codeforces.com/problemset/problem/662/A 题目大意: 给定n(n <= 500000)张卡片,每张卡片的两个面都写有数字,每个面都有0.5的概 ...

  6. CodeForces - 274B Zero Tree

    http://codeforces.com/problemset/problem/274/B 题目大意: 给定你一颗树,每个点上有权值. 现在你每次取出这颗树的一颗子树(即点集和边集均是原图的子集的连 ...

  7. CodeForces - 261B Maxim and Restaurant

    http://codeforces.com/problemset/problem/261/B 题目大意:给定n个数a1-an(n<=50,ai<=50),随机打乱后,记Si=a1+a2+a ...

  8. CodeForces - 696B Puzzles

    http://codeforces.com/problemset/problem/696/B 题目大意: 这是一颗有n个点的树,你从根开始游走,每当你第一次到达一个点时,把这个点的权记为(你已经到过不 ...

  9. CodeForces - 148D Bag of mice

    http://codeforces.com/problemset/problem/148/D 题目大意: 原来袋子里有w只白鼠和b只黑鼠 龙和王妃轮流从袋子里抓老鼠.谁先抓到白色老鼠谁就赢. 王妃每次 ...

随机推荐

  1. PAT 1039 到底买不买(20)(20 分)

    1039 到底买不买(20)(20 分) 小红想买些珠子做一串自己喜欢的珠串.卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖.于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要 ...

  2. 网页 PHP 动态师范

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. BZOJ1833或洛谷2602 [ZJOI2010]数字计数

    BZOJ原题链接 洛谷原题链接 又是套记搜模板的时候.. 对\(0\sim 9\)单独统计. 定义\(f[pos][sum]\),即枚举到第\(pos\)位,前面枚举的所有位上是当前要统计的数的个数之 ...

  4. 卸载服务器GitLab

    sudo gitlab-ctl uninstall sudo rpm -e gitlab-ce find / -name gitlab|xargs rm -rf

  5. [线段树]picture

    PICTURE 题目描述 N(N<5000) 张矩形的海报,照片和其他同样形状的图片贴在墙上.它们的边都是垂直的或水平的.每个矩形可以部分或者全部覆盖其他矩形.所有的矩形组成的集合的轮廓称为周长 ...

  6. de4dot破解脱壳新版MaxtoCode源数组长度不足解决办法

    之前在看雪混了4年.NET破解版主,现在转战这里,发现很多人还在玩的是工具类的破解,可以说这里的人都还是皮毛啊 最近很多人问使用de4dot脱壳MaxtoCode有问题,之前写过一个教程,那是工具篇的 ...

  7. 看看用PS来转基因的动物,居然很欢乐!!

    出于礼貌,我先笑一下,哈哈哈哈哈哈!好了,开始.Gyyporama是挪威的一名程序员,他无聊的时候会从网上找来一些动物的图片,把他们的头和身体进行混合,生成另一种奇怪的动物.然后邀请其他网友过来给他们 ...

  8. angular2在双向数据绑定时[(ngModel)]无法使用的问题

    angular2在双向数据绑定时[(ngModel)]无法使用,出现的错误是: Can't bind to 'ngModel' since it isn't a known property of ' ...

  9. day13作业—(登录注册)

    2.写一个函数完成三次登陆功能: 用户的用户名密码从一个文件register中取出. register文件包含多个用户名,密码,用户名密码通过|隔开,每个人的用户名密码占用文件中一行. 完成三次验证, ...

  10. 3.The significance of Books 书本的意义

    3.The significance of Books 书本的意义 (1)A bookless life is an imcomplete life.Books influence the depth ...