BZOJ4247挂饰
Description
Input
Output
Solution
与普通背包不同的地方在于,这里背包的容量是动态的,所以用f[i][j]表示前i件物品中,满足还剩j个挂钩空着的最大愉悦值,就解决了背包容量未知的问题,然后状态转移方程的推导与01背包相似,如果不取第i个,最优解就是f[i-1][j],如果取,f[i-1][max(j-a[i],0)+1]+b[i]。因为如果不取这个挂饰,挂钩数就只剩下j-a[i]+1个,但这个表达式的值有可能是一个负数,没有意义,所以要取最差的情况,即舍弃所有挂饰,只剩手机上原来的那个挂钩,也就是1个挂钩。
但是有些时候,j-a[i]+1为负数也可能有意义。因为挂钩的位置没有要求,只要后来的挂钩能把j补成非负数就是合法的,但如果去考虑这个,动规的循环变量就不确定,所以要把挂饰按能提供的挂钩数量从大到小排序,就能避免这种情况。
(参考:http://www.cnblogs.com/2014nhc/p/6231288.html)
Code
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int f[][]; struct rec
{
int a,b;
}x[]; int cmp(const rec&x1,const rec&x2)
{
return x1.a>x2.a;
} int max(int a,int b)
{
return a>b?a:b;
} int main()
{
int n;
scanf("%d",&n);
for (int i=; i<=n; i++)
scanf("%d%d",&x[i].a,&x[i].b);
sort(x+,x+n+,cmp);
memset(f,-,sizeof(f));
f[][]=;
for (int i=; i<=n; i++)
for (int j=; j<=n; j++)
f[i][j]=max(f[i-][j],f[i-][max(j-x[i].a,)+]+x[i].b);
int ans=;
for (int i=; i<=n; i++)
ans=max(ans,f[n][i]);
printf("%d",ans);
return ;
}
Source
http://www.lydsy.com/JudgeOnline/problem.php?id=4247
BZOJ4247挂饰的更多相关文章
- [BZOJ4247]挂饰(DP)
当最终挂饰集合确定了,一定是先挂挂钩多的在挂挂钩少的. 于是按挂钩从大到小排序,然后就是简单的01背包. #include<cstdio> #include<algorithm> ...
- bzoj千题计划197:bzoj4247: 挂饰
http://www.lydsy.com/JudgeOnline/problem.php?id=4247 先把挂饰按挂钩数量从大到小排序 dp[i][j]前i个挂饰,剩下j个挂钩的最大喜悦值 分挂和不 ...
- BZOJ4247 : 挂饰
首先将挂饰按照挂钩个数从大到小排序,然后DP 设f[i][j]处理完前i个挂饰,还有j个多余挂钩的最大喜悦值,则 f[0][1]=0 f[i][j]=max(f[i-1][max(j-a[i],0)+ ...
- bzoj4247挂饰——压缩的动态规划
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4247 1.dp之前要先按挂钩个数从大到小排序,不然挂钩一度用成负的也可能是正确的,不仅脚标难 ...
- [bzoj4247][挂饰] (动规+排序)
Description JOI君有N个装在手机上的挂饰,编号为1...N. JOI君可以将其中的一些装在手机上. JOI君的挂饰有一些与众不同——其中的一些挂饰附有可以挂其他挂件的挂钩.每个挂件要么直 ...
- bzoj4247: 挂饰(背包dp)
4247: 挂饰 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1136 Solved: 454[Submit][Status][Discuss] ...
- bzoj4247: 挂饰(背包)
4247: 挂饰 题目:传送门 题解: 看完题目很明显的一道二维背包(一开始还推错了) 设f[i][j]表示前i个挂饰选完(可以有不选)之后还剩下j个挂钩的最大值(j最多贡献为n) 那么f[i][j] ...
- BZOJ4247 挂饰(动态规划)
相当于一个有负体积的背包.显然如果确定了选哪些,应该先把体积小的挂上去.于是按体积从小到大排序,就是一个裸的背包了. #include<iostream> #include<cstd ...
- bzoj4247挂饰——DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4247 就是01背包: 把挂钩数限制在n以内,因为不需要更多,而这会带来一些问题,就是有很多挂 ...
随机推荐
- java实现二分查找
/** * 二分查找 * @param a * @param n * @param value * @return * @date 2016-10-8 * @author shaobn */ publ ...
- SQL语句 在一个表中插入新字段
SQL语句 在一个表中插入新字段: alter table 表名 add 字段名 字段类型 例: alter table OpenCourses add Audio varchar(50)alter ...
- 创建支持eclipse的多模块maven项目
通过maven可以创建多个关联模块的项目(Multiple Module Projects).由一个总的模块,下面包含多个子模块(子模块还可以包含子模块). 这种maven功能能支持大型的项目构建,往 ...
- [整理]Centos6.5 + hadoop2.6.4环境搭建
搭建Hadoop集群环境(3台机器) 1 准备环境 1.1 安装系统,并配置网络使3台机器互联互通,且SSH可直连(无需密码.保存私钥) 1.1.1 安装系统 安装Centos 6.5系统 安装过程略 ...
- Classic Shell 4.2.4 中文版已经发布
新版本支持 windows 10 操作系统了.请点击本博客页面左上角的链接下载. 博主的电脑最近也升级到 Windows 10 操作系统,用了没几天就出现打不开“开始”菜单.Edge.计算器等 App ...
- AutoHotkey 使用笔记
注意事项 为了支持中文需安装 AutoHotkey_L Notepad2对ahk代码高亮和折叠支持良好,SciTE则能够提供输入提示 绿色版*.ahk关联AutoHotkey.exe就能双击运行 Au ...
- barManager 挤压后“ 自动换行”和“自动隐藏”的实现方法
- Razor语法&ActionResult&MVC
Razor代码复用 mvc 4 razor语法讲解和使用 了解ASP.NET MVC几种ActionResult的本质:EmptyResult & ContentResult 了解ASP.NE ...
- JQuery常用方法一览
$(”p”).addClass(css中定义的样式类型); 给某个元素添加样式 $(”img”).attr({src:”test.jpg”,alt:”test Image”}); 给某个元素添加属性/ ...
- Autumn is a second spring when every leaf is a flower.
Autumn is a second spring when every leaf is a flower. 秋天即是第二个春天,每片叶子都是花朵.——阿尔贝·加缪