博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 4247 挂饰
阅读量:4673 次
发布时间:2019-06-09

本文共 1518 字,大约阅读时间需要 5 分钟。

4247: 挂饰

Time Limit: 10 Sec Memory Limit: 256 MB

Submit: 1388 Solved: 565
[Submit][Status][Discuss]
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)

Source

JOI 2013~2014 春季training合宿 竞技4 By PoPoQQQ

——————————————————————————–

题解

背包,首先要对挂钩数目进行排序,因为先选挂钩多的更优,dp[i][j]表示选到第i个,有j个挂钩的喜悦值,然后直接0/1背包即可。

代码

#include
using namespace std;const int MAXN = 3005;int dp[MAXN][MAXN]; //dp[i][j]表示第i个挂饰,共有j个挂钩。int n,sum,ans;struct G { int a,b;} g[MAXN];inline bool cmp(G A,G B) { return A.a>B.a;}int main() { memset(dp,0xcf,sizeof(dp)); scanf("%d",&n); for(register int i=1; i<=n; i++) scanf("%d%d",&g[i].a,&g[i].b); dp[0][1]=0; sort(g+1,g+1+n,cmp); for(register int i=1; i<=n; i++) for(register int j=0;j<=n;j++){ dp[i][j]=max(dp[i-1][j],dp[i-1][max(j-g[i].a,0)+1]+g[i].b); }// for(register int i=1;i<=n;i++)// for(register int j=0;j<=n;j++)// cout<
<<" "<
<<" "<
<

转载于:https://www.cnblogs.com/sdfzsyq/p/9677083.html

你可能感兴趣的文章
pip安装第三方库以及版本
查看>>
一、app更新提示后台接口开发-(2)数据库表设计
查看>>
利用data-src属性 更换图片
查看>>
Spring(3)
查看>>
SSM整合 mybatis多条件查询与分页
查看>>
VS2010中dumpbin工具的使用
查看>>
使用Golang搭建web服务
查看>>
HTML5触摸事件(touchstart、touchmove和touchend)
查看>>
架构师软技能之协商(上)
查看>>
商品翻牌效果(纯css)
查看>>
win10 UWP 序列化
查看>>
读书心得
查看>>
前端知识整理 CSS盒模型
查看>>
sendmail 常见报错总结
查看>>
asp.net Response.AddHeader的方法来下载
查看>>
neo4j-访问提示No authorization header supplied.
查看>>
android-activity生命周期方法
查看>>
基于贪心算法的几类区间覆盖问题 nyoj 12喷水装置(二) nyoj 14会场安排问题...
查看>>
web之JavaScript
查看>>
HTML input 控件
查看>>