经典排序背包——cf1203F
时间:2019-09-12
本文章向大家介绍经典排序背包——cf1203F,主要包括经典排序背包——cf1203F使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
先把收益为正数的处理掉:策略是挨个扫,扫n遍,碰到能买的就买,然后可以得到一个更新后的r
剩下的就看做是一个背包模型:物品(a,b)表示当背包体积>a时才能装下体积为b的该物品,问最多装几个
无序枚举所有物品显然错误,要选择先买哪个更优
对于两个物品(ai,bi),(aj,bj),有两种顺序
先买i,则至少需要max(ai,aj+bi)的体积
先买j,则至少需要max(aj,ai+bj)的体积
因为每买一件物品,剩余体积必定下降,显然我们先考虑的是那个需要体积大的物品,这样才有可能买需要体积小的物品,或者说,为了达到某种状态,必须先买需要体积大的,再买体积小的
那么比较 aj+bi和ai+bj即可,转化成比较aj-bj和ai-bi,对这个差值降序排序
/* 排序背包,本题要考虑两个物品(a1,b1),(a2,b2)谁先买 先买第一种最少要max(a1,a2-b1),先买第二件最少要max(a2,a1-b2) */ #include<bits/stdc++.h> using namespace std; #define N 30005 int dp[105][N<<1],n,r; struct Node{ int a,b; }c[105],d[105]; int cmp(Node a,Node b){return a.a+a.b>b.a+b.b;} int cnt1,cnt2,vis[N]; int main(){ cin>>n>>r; for(int i=1;i<=n;i++){ int a,b;cin>>a>>b; if(b>0){ cnt1++; c[cnt1].a=a,c[cnt1].b=b; } else { cnt2++; d[cnt2].a=a,d[cnt2].b=b; } } int tot=0; for(int i=1;i<=cnt1;i++) for(int j=1;j<=cnt1;j++) if(!vis[j] && r>=c[j].a){ r+=c[j].b; vis[j]=1; tot++; break; } sort(d+1,d+1+cnt2,cmp); memset(dp,-0x3f,sizeof dp); dp[0][r]=tot; for(int i=1;i<=cnt2;i++) for(int j=0;j<=r;j++){ if(dp[i-1][j]>=0)//不选第i件 dp[i][j]=dp[i-1][j]; if(j-d[i].b>=d[i].a && dp[i-1][j-d[i].b]>=0)//选第i件 dp[i][j]=max(dp[i][j],dp[i-1][j-d[i].b]+1); } int ans=0; for(int j=r;j>=0;j--) if(dp[cnt2][j]>=0)ans=max(ans,dp[cnt2][j]); cout<<ans<<endl; }
原文地址:https://www.cnblogs.com/zsben991126/p/11515349.html
- 使用dropwizard(5)--加入swagger
- 使用hint来调优sql语句(72天)
- 用R语言对城管事件数据分析
- 使用dropwizard(4)-加入测试-jacoco代码覆盖率
- goldengate学习-安装篇(71天)
- 使用dropwizard(6)-国际化-easy-i18n
- 配置不同环境下启用swagger,在生产环境关闭swagger
- 使用ControllerAdvice注意事项,Ambiguous @ExceptionHandler method mapped for [class org.springframework.web.
- rac节点无法启动ORA-29702的问题及分析(70天)
- SpringMVC,SpringBoot文件下载
- SpringCloud学习1-服务注册与发现(Eureka)
- 物化视图全量刷新与insert的redo生成量测试(69天)
- SpringCloud学习2-Springboot监控模块(actuator)
- 原码,反码,补码 与(&) 或(|) 非(~) 异或(^) 左移 << 右移 >> 无符号右移 >>>
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- thinkPHP5.1框架中Request类四种调用方式示例
- Python TestSuite生成测试报告过程解析
- PHP goto语句用法实例
- laravel5.5安装jwt-auth 生成token令牌的示例
- Windows环境下安装PHP Pear的方法图文教程
- php菜单/评论数据递归分级算法的实现方法
- 关于laravel5.5的定时任务详解(demo)
- 用PHP做了一个领取优惠券活动的示例代码
- Laravel 自定命令以及生成文件的例子
- 深入了解Python 变量作用域
- Laravel5.5 数据库迁移:创建表与修改表示例
- python代码能做成软件吗
- php适配器模式简单应用示例
- Python 解析简单的XML数据
- Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()