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)
写在前面:感谢Godder,Yveh,CA爷
————————————————————————————————————————————————————————

01背包,只不过多加了一维表示当前还剩下几个挂钩可以用,即f[i][j]表示前i个物品并且剩余j个挂钩所能获得的最大价值。注意初始值要赋值为极小值(而不是0)。要把所有物品按挂钩数量由大到小先排一下序,因为有可能先把挂钩用成负的然后再加回来。
方程:f[i][j]=max(f[i−1][max(j−s[i].v,0)+1]+s[i].w,f[i−1][j]);(取与不取)
初始:不可能取到的置为极小值(f[0][1]=0)。
目标:f[n][0..n]中最大值。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n;
int f[2010][2010];
struct os
{int w,v;
}a[5010];
int maxn;
int comp(os x,os y)
{return x.w>y.w;
}
main()
{scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%d%d",&a[i].w,&a[i].v);memset(f,-63,sizeof(f)); sort(a+1,a+n+1,comp);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-a[i].w,0)+1]+a[i].v);for (int i=0;i<=n;i++) maxn=max(maxn,f[n][i]); printf("%d",maxn);
}

【BZOJ4247】挂饰,又一个奇特的背包相关推荐

  1. bzoj4247: 挂饰(背包dp)

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

  2. BZOJ4247挂饰

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

  3. BZOJ4247: 挂饰

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

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

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

  5. bzoj4247 挂饰

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

  6. bzoj4247: 挂饰(01背包)

    状态:f[ i ][ j ]表示选到第 i 个物品时还剩 j 个勾 转移:f[i][j]=max(f[i-1][j-edge[i].gou+1>1?j-edge[i].gou+1:1]+edge ...

  7. 【BZOJ4247】挂饰 背包

    [BZOJ4247]挂饰 Description JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他 ...

  8. 【BZOJ4247】挂饰

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

  9. 「JOISC 2014 Day4」挂饰(背包DP)题解

    题目翻译 JOI 君有 n n n 个装在手机上的挂饰,编号为 1 - n 1 \ldots n 1-n. JOI 君可以将其中一些挂饰装在手机上. JOI 君的挂饰有一些与众不同--其中的一些挂饰附 ...

最新文章

  1. 第6章:可维护性软件构建方法 6.2可维护性设计模式
  2. mybatis学习(十一)——springmvc++spring+mybatis整合
  3. 最大子段和(动态规划及分治法)
  4. java从远程服务器获取PDF文件并后台打印(使用pdfFox)
  5. mysql 1021 disk full_大分区使用xfs文件系统存储备份遇到的问题
  6. fastapi学习(一):输出hello world与基本运行方法
  7. H3C DHCP中继和RIP配置实验
  8. Wireshark实战分析之DNS协议分析(一)
  9. 人民日报刊发浪潮集团董事长孙丕恕署名文章:更好实现数据共享
  10. 腾讯云学生服务器+wordpress搭建个人网站
  11. 计算机不显示验证码,验证码不显示_网页不显示验证码是怎么回事?
  12. ARM发展史,初步汇总
  13. 常见的十大恶意软件类型
  14. PYTHON爬取拉钩网
  15. SVN二次开发收集01
  16. JavaScript数据类型 - Undefined类型
  17. ps彩色照片变黑白照片
  18. 手把手教你搭建gitlab服务器
  19. 我的物联网项目(三十一) 分销模式电商平台
  20. c++系列 —— 智能指针auto_ptr和unique_ptr

热门文章

  1. 【李宏毅机器学习】Introduction of ELMO、BERT、GPT(p25) 学习笔记
  2. Vue动态类名的实现
  3. c fun函数求n个整数的平均值_c语言题目(求阶乘)
  4. 数据库 统计数据收集 有什么作用_《原神》荒山孤剑录2/5收集汇总 荒山孤剑录作用是什么...
  5. 在哪里买铁甲格斗机器人_铁甲雄心Ⅱ火了 优必选“超变铁甲”掀起闯关赢免单热潮...
  6. docker用gpu的参数_ZStack实践汇 | ZStack+Docker支撑GPU业务实践
  7. rust全息要啥才能做_在 Rust 中不能做什么
  8. idea错误提示不明显_微信公众号扫一扫功能提示:10003 redirect_uri域名与后台配置不一致错误解决方案...
  9. java中的文件处理io_Java的IO前奏曲:文件操作类之___File
  10. mac mongodb可视化工具_github项目推荐|2019 冠状病毒疫情爬虫。疫情数据可视化