51nod3176 挂饰
3176 挂饰
JOI君有N个挂饰,编号为1...N。 JOI君可以将其中的一些装在手机上。(2 <= N <= 2000)
JOI君的挂饰有一些与众不同——其中的一些挂饰附有可以挂其他挂件的挂钩。每个挂件要么直接挂在手机上,要么挂在其他挂件的挂钩上。直接挂在手机上的挂件最多有1个。
此外,每个挂件有一个安装时会获得的喜悦值,用一个整数来表示。如果JOI君很讨厌某个挂饰,那么这个挂饰的喜悦值就是一个负数。
JOI君想要最大化所有挂饰的喜悦值之和。注意不必将所有的挂钩都挂上挂饰,而且一个都不挂也是可以的。
输入
第一行一个整数N,代表挂饰的个数。
接下来N行,第i行(1<=i<=N)有两个空格分隔的整数Ai和Bi,表示挂饰i有Ai个挂钩,安装
后会获得Bi的喜悦值。
输出
输出一行一个整数,表示手机上连接的挂饰总和的最大值
数据范围
22% 2 <= N <= 15
35% 2 <= N <= 100
100% 2 <= N <= 2000
输入样例
5
0 4
2 -2
1 -1
0 1
0 3
输出样例
5
解析:
我们把物品分成四类:
1.有挂钩,装饰度非负
2.有挂钩,装饰度为负数
3.无挂钩,装饰度非负
4.无挂钩,装饰度为负数
显然,对于第一种物品,肯定是要选的,第四种物品肯定是不选的
那么对于二、三种情况我们应该怎么处理呢?
对于第二种,我们求出数组f[],其中f[i]表示安装后有ii个挂钩时的最大装饰度。这个用01背包来做就可以了。
对于第三个,如果我们现在可以选k件第二种类型的挂钩,我们会怎么选?贪心的想法告诉我们,因为a[i]都相等,所以肯定挑b[i]更大的前k个。所以就枚举剩余挂钩的数量k,这样f[k]就是在1,2中选出一些挂饰剩余k个挂钩的最大装饰度,再加上b[i]最大的前k个第三种挂饰的喜悦值即可。
放代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
struct h{
int k,t;
}x[2500];
int cmp(const h&a,const h&b)
{
return a.k>b.k;
}
int max(int a,int b)
{
return (a>b?a:b);
}
int f[2500][2500];
int pop,n,ans;
int main()
{
scanf("%d",&n);
for (int i=1;i<=n;i++) scanf("%d %d",&x[i].k,&x[i].t) ;
sort(x+1,x+n+1,cmp);
memset(f,-210000000,sizeof(f));
f[0][1]=0;
for (int i=1;i<=n;i++)
for (int j=0;j<=n;j++)
f[i][j]=max(f[i-1][j],f[i-1][max(j-x[i].k,0)+1]+x[i].t);
ans=0;
for (int i=0;i<=n;i++)
ans=max(ans,f[n][i]);
printf("%d",ans);
return 0;
}
51nod3176 挂饰相关推荐
- bzoj千题计划197:bzoj4247: 挂饰
http://www.lydsy.com/JudgeOnline/problem.php?id=4247 先把挂饰按挂钩数量从大到小排序 dp[i][j]前i个挂饰,剩下j个挂钩的最大喜悦值 分挂和不 ...
- BZOJ 4247 挂饰 背包DP
4247: 挂饰 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id ...
- 【BZOJ4247】挂饰,又一个奇特的背包
Description JOI君有N个装在手机上的挂饰,编号为1-N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直接挂 ...
- bzoj 4247: 挂饰(DP)
4247: 挂饰 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 1230 Solved: 497 [Submit][Status][Discuss ...
- BZOJ4247挂饰
Description JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直 ...
- bzoj 4247: 挂饰
Description JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直 ...
- bzoj4247 挂饰
4247: 挂饰 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 1098 Solved: 440 [Submit][Status][Discuss ...
- BZOJ 4247 挂饰
4247: 挂饰 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 1388 Solved: 565 [Submit][Status][Discuss] ...
- 【BZOJ4247】挂饰
Description JOI君有N个装在手机上的挂饰,编号为1-N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直接挂 ...
最新文章
- 路由器默认密码(转自ITAA)
- 2019.03.24 视图和静态读取
- 将jar文件转换成exe可执行文件[转]
- 四五月份:关键词是沟通、绘画和SQL
- C++ opengl 启动光照
- Golang实践录:工程管理
- 交换局域网(链路层+以太网+交换机)
- 太厉害了MySQL总结的太全面了
- React学习之旅Part7:React绑定事件和使用setState()修改state的数据、React实现双向数据绑定
- 联创宽带上网助手 vista版
- 如何解决wup.exe文件占用cpu资源
- 共享内存函数(shmget、shmat、shmdt、shmctl)
- java电脑类_计算机类在Java中的设计于实现码
- 绩效考核功能操作流程
- 科普 | 生物多样性: 大自然的新陈代谢
- 直流稳压稳流开关电源使用说明(LW-6020)
- CnOpenData全国兴趣点(POI)数据
- 基于深度学习的自然场景文字识别
- android incide_INSIDE_INSIDE官方正版_INSIDE官方正版安卓下载_好趣手游网
- 高阶次勒让德计算(跨阶次递推公式)