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 挂饰相关推荐

  1. bzoj千题计划197:bzoj4247: 挂饰

    http://www.lydsy.com/JudgeOnline/problem.php?id=4247 先把挂饰按挂钩数量从大到小排序 dp[i][j]前i个挂饰,剩下j个挂钩的最大喜悦值 分挂和不 ...

  2. BZOJ 4247 挂饰 背包DP

    4247: 挂饰 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/problem.php?id ...

  3. 【BZOJ4247】挂饰,又一个奇特的背包

    Description JOI君有N个装在手机上的挂饰,编号为1-N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直接挂 ...

  4. bzoj 4247: 挂饰(DP)

    4247: 挂饰 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 1230  Solved: 497 [Submit][Status][Discuss ...

  5. BZOJ4247挂饰

    Description JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直 ...

  6. bzoj 4247: 挂饰

    Description JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直 ...

  7. bzoj4247 挂饰

    4247: 挂饰 Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 1098  Solved: 440 [Submit][Status][Discuss ...

  8. BZOJ 4247 挂饰

    4247: 挂饰 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 1388 Solved: 565 [Submit][Status][Discuss] ...

  9. 【BZOJ4247】挂饰

    Description JOI君有N个装在手机上的挂饰,编号为1-N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直接挂 ...

最新文章

  1. 路由器默认密码(转自ITAA)
  2. 2019.03.24 视图和静态读取
  3. 将jar文件转换成exe可执行文件[转]
  4. 四五月份:关键词是沟通、绘画和SQL
  5. C++ opengl 启动光照
  6. Golang实践录:工程管理
  7. 交换局域网(链路层+以太网+交换机)
  8. 太厉害了MySQL总结的太全面了
  9. React学习之旅Part7:React绑定事件和使用setState()修改state的数据、React实现双向数据绑定
  10. 联创宽带上网助手 vista版
  11. 如何解决wup.exe文件占用cpu资源
  12. 共享内存函数(shmget、shmat、shmdt、shmctl)
  13. java电脑类_计算机类在Java中的设计于实现码
  14. 绩效考核功能操作流程
  15. 科普 | 生物多样性: 大自然的新陈代谢
  16. 直流稳压稳流开关电源使用说明(LW-6020)
  17. CnOpenData全国兴趣点(POI)数据
  18. 基于深度学习的自然场景文字识别
  19. android incide_INSIDE_INSIDE官方正版_INSIDE官方正版安卓下载_好趣手游网
  20. 高阶次勒让德计算(跨阶次递推公式)

热门文章

  1. Unity 2019 打包黑屏、粉屏
  2. 苍穹 WebOffice小科普,轻松助力在线Office办公
  3. fvdm 跟驰模型 matlab仿真_强大的系统级热流体仿真软件Flownex了解一下,还有大咖免费培训哦...
  4. charles 的map remote 和map local的功能和使用方法
  5. 高清Apriltag图片生成和制作
  6. 【凸优化笔记一】仿射集+凸集+锥
  7. 春节之后:感悟与困惑
  8. 计算机网络——VRRP(第一条冗余协议)
  9. python 保存和读取中间变量
  10. Windows下通过BAT执行文件下载任务