【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)
写在前面:感谢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】挂饰,又一个奇特的背包相关推荐
- bzoj4247: 挂饰(背包dp)
4247: 挂饰 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 1136 Solved: 454 [Submit][Status][Discuss ...
- BZOJ4247挂饰
Description JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直 ...
- BZOJ4247: 挂饰
Description JOI君有N个装在手机上的挂饰,编号为1-N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直接挂 ...
- bzoj千题计划197:bzoj4247: 挂饰
http://www.lydsy.com/JudgeOnline/problem.php?id=4247 先把挂饰按挂钩数量从大到小排序 dp[i][j]前i个挂饰,剩下j个挂钩的最大喜悦值 分挂和不 ...
- bzoj4247 挂饰
4247: 挂饰 Time Limit: 10 Sec Memory Limit: 256 MB Submit: 1098 Solved: 440 [Submit][Status][Discuss ...
- 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 ...
- 【BZOJ4247】挂饰 背包
[BZOJ4247]挂饰 Description JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他 ...
- 【BZOJ4247】挂饰
Description JOI君有N个装在手机上的挂饰,编号为1-N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同--其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直接挂 ...
- 「JOISC 2014 Day4」挂饰(背包DP)题解
题目翻译 JOI 君有 n n n 个装在手机上的挂饰,编号为 1 - n 1 \ldots n 1-n. JOI 君可以将其中一些挂饰装在手机上. JOI 君的挂饰有一些与众不同--其中的一些挂饰附 ...
最新文章
- 第6章:可维护性软件构建方法 6.2可维护性设计模式
- mybatis学习(十一)——springmvc++spring+mybatis整合
- 最大子段和(动态规划及分治法)
- java从远程服务器获取PDF文件并后台打印(使用pdfFox)
- mysql 1021 disk full_大分区使用xfs文件系统存储备份遇到的问题
- fastapi学习(一):输出hello world与基本运行方法
- H3C DHCP中继和RIP配置实验
- Wireshark实战分析之DNS协议分析(一)
- 人民日报刊发浪潮集团董事长孙丕恕署名文章:更好实现数据共享
- 腾讯云学生服务器+wordpress搭建个人网站
- 计算机不显示验证码,验证码不显示_网页不显示验证码是怎么回事?
- ARM发展史,初步汇总
- 常见的十大恶意软件类型
- PYTHON爬取拉钩网
- SVN二次开发收集01
- JavaScript数据类型 - Undefined类型
- ps彩色照片变黑白照片
- 手把手教你搭建gitlab服务器
- 我的物联网项目(三十一) 分销模式电商平台
- c++系列 —— 智能指针auto_ptr和unique_ptr
热门文章
- 【李宏毅机器学习】Introduction of ELMO、BERT、GPT(p25) 学习笔记
- Vue动态类名的实现
- c fun函数求n个整数的平均值_c语言题目(求阶乘)
- 数据库 统计数据收集 有什么作用_《原神》荒山孤剑录2/5收集汇总 荒山孤剑录作用是什么...
- 在哪里买铁甲格斗机器人_铁甲雄心Ⅱ火了 优必选“超变铁甲”掀起闯关赢免单热潮...
- docker用gpu的参数_ZStack实践汇 | ZStack+Docker支撑GPU业务实践
- rust全息要啥才能做_在 Rust 中不能做什么
- idea错误提示不明显_微信公众号扫一扫功能提示:10003 redirect_uri域名与后台配置不一致错误解决方案...
- java中的文件处理io_Java的IO前奏曲:文件操作类之___File
- mac mongodb可视化工具_github项目推荐|2019 冠状病毒疫情爬虫。疫情数据可视化