【BZOJ4247】挂饰

Description

JOI君有N个装在手机上的挂饰,编号为1...N。 JOI君可以将其中的一些装在手机上。
JOI君的挂饰有一些与众不同——其中的一些挂饰附有可以挂其他挂件的挂钩。每个挂件要么直接挂在手机上,要么挂在其他挂件的挂钩上。直接挂在手机上的挂件最多有1个。
此外,每个挂件有一个安装时会获得的喜悦值,用一个整数来表示。如果JOI君很讨厌某个挂饰,那么这个挂饰的喜悦值就是一个负数。
JOI君想要最大化所有挂饰的喜悦值之和。注意不必要将所有的挂钩都挂上挂饰,而且一个都不挂也是可以的。

Input

第一行一个整数N,代表挂饰的个数。
接下来N行,第i行(1<=i<=N)有两个空格分隔的整数Ai和Bi,表示挂饰i有Ai个挂钩,安装后会获得Bi的喜悦值。 

Output

输出一行一个整数,表示手机上连接的挂饰总和的最大值

Sample Input

5
0 4
2 -2
1 -1
0 1
0 3

Sample Output

5

HINT

将挂饰2直接挂在手机上,然后将挂饰1和挂饰5分别挂在挂饰2的两个挂钩上,可以获得最大喜悦值4-2+3=5。
1<=N<=2000
0<=Ai<=N(1<=i<=N)
-10^6<=Bi<=10^6(1<=i<=N)

题解:考虑:如果选出一些挂饰后,总的挂钩数不少于总的挂饰数,那么一定可以将这些挂饰都挂到手机上(因为顺序没有必要)。

所以设f[i]表示当前剩余挂钩数为i,可以获得的最大喜悦值,然后背包~

注意要先将挂饰按照挂钩数排序~

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n,ans;
int f[2010];
struct node
{
int A,B;
}p[2010];
bool cmp(node a,node b)
{
return a.A>b.A;
}
int main()
{
scanf("%d",&n);
int i,j;
for(i=1;i<=n;i++) scanf("%d%d",&p[i].A,&p[i].B);
memset(f,0x80,sizeof(f));
f[1]=0;
sort(p+1,p+n+1,cmp);
for(i=1;i<=n;i++)
{
if(p[i].A>1) for(j=n+p[i].A-1;j>=p[i].A;j--) f[min(j,n)]=max(f[min(j,n)],f[j-p[i].A+1]+p[i].B);
if(!p[i].A&&p[i].B>0) for(j=0;j<=n-1;j++) f[j]=max(f[j],f[j+1]+p[i].B);
if(p[i].A==1&&p[i].B>0) for(j=0;j<=n;j++) f[j]+=p[i].B;
}
for(i=0;i<=n;i++) ans=max(ans,f[i]);
printf("%d",ans);
return 0;
}

最新文章

  1. 2、实现不同子网之间的信息交流(互相可以PING通)
  2. NIO与AIO,同步/异步,阻塞/非阻塞
  3. C语言初级进阶2
  4. 陷阱~EF中的Update与Insert共用一个数据上下文
  5. 【JAVA、C++】 LeetCode 008 String to Integer (atoi)
  6. 狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(2)
  7. Maven找不到java编译器的问题
  8. JSch - Java实现的SFTP(文件下载详解篇)(转)
  9. build.prop修改详细说明
  10. requestAnimationFrame动画方法
  11. Android中GPS简介及其应用
  12. C语言深度剖析---预处理(define)(转载)
  13. [Storage]RPM series linux rescan disk / RPM系Linux重新扫描硬盘
  14. Linux之 nginx-redis-virtualenv-mysql
  15. [转帖] SQL参数化的优点 CopyFrom https://www.cnblogs.com/-lzb/articles/4840671.html
  16. Codeforces Round #441 D. Sorting the Coins(模拟)
  17. 大数据新手之路四:联合使用Flume和Kafka
  18. [LeetCode&amp;Python] Problem 543. Diameter of Binary Tree
  19. Nginx:承受3万并发连接数,胜过Apache 10倍
  20. JavaWeb项目中web.xml有关servlet的基本配置

热门文章

  1. matlab经常使用小函数(一)
  2. c#上一周下一周代码
  3. Cocos2dx报OpenGL error 0x0506错误
  4. 动态获取html页面的内容,而且取当中的某块元素的方法
  5. ace admin 下拉选择Multiple-select组件
  6. js 从数组中随机获取一个值
  7. MII_GMII_RGMII_RMII_SMII_SSMII_TBI_RTBI
  8. OCR 即 光学字符识别
  9. spring 第一篇(1-3):鸟瞰spring蓝图
  10. 【原创】菜鸟版Android 笔记2- Activity