TopCoder SRM502 Div1 500 贪心 01背包
原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-500.html
SRM502 Div1 500
好题。
首先,如果已经确定了解决所有问题的优先级,只需要对于每一个问题是否被解决做出决策,那么显然直接 01 背包就好了。
事实上,我们是可以贪心地确定两个问题的优先程度的。
对于两个问题,假设分别为 a 和 b,则先做 a 再紧接着做 b 和先做 b 再紧接着做 a 的收益之差为
&&(-dec_a\times req_a-dec_b\times (req_a+req_b))-(-dec_b\times req_b-dec_a\times (req_a+req_b))\\
&=&dec_areq_b-dec_breq_a
\end{eqnarray*}
\]
设 先做 a 再紧接着做 b 优于 先做 b 再紧接着做 a ,那么
\Longrightarrow \frac{dec_a}{req_a}>\frac{dec_b}{req_b}
\]
如果我们称在一种方案中,a 先于 b 做,但不满足上式时,ab 为一对逆序对,那么:
不失一般性,对于某一种方案的任何相邻的逆序对都执行交换操作后,这种方案中依次进行的决策的相邻元素都满足上式,等价于按照上式所述的特殊值排序。
于是我们就确定了所有问题的优先级,再套个 01 背包即可解决这个问题。
static const int N=55,TT=100005*2;
static const LL INF=1LL<<56;
int n;
LL dp[TT];
int find(int T, vector <int> a, vector <int> d, vector <int> r){
n=a.size();
for (int i=0;i<n;i++)
for (int j=i+1;j<n;j++)
if (1LL*r[j]*d[i]<1LL*r[i]*d[j]){
swap(a[i],a[j]);
swap(d[i],d[j]);
swap(r[i],r[j]);
}
for (int i=0;i<TT;i++)
dp[i]=-INF;
dp[0]=0;
for (int i=0;i<n;i++)
for (int j=T-1;j>=0;j--)
dp[j+r[i]]=max(dp[j+r[i]],dp[j]+a[i]-1LL*d[i]*(j+r[i]));
LL ans=-INF;
for (int i=0;i<=T;i++)
ans=max(ans,dp[i]);
return ans;
}
TopCoder SRM502 Div1 500 贪心 01背包的更多相关文章
- HDU 3466 Proud Merchants【贪心 + 01背包】
Recently, iSea went to an ancient country. For such a long time, it was the most wealthy and powerfu ...
- Codeforces1203F2. Complete the Projects (hard version) (贪心+贪心+01背包)
题目链接:传送门 思路: 对于对rating有提升的项目,肯定做越多越好,所以把$b_{i} >= 0$的项目按rating要求从小到大贪心地都做掉,得到最高的rating记为r. 对于剩余的$ ...
- TopCoder SRM500 Div1 500 分治
原文链接https://www.cnblogs.com/zhouzhendong/p/SRM500-500.html SRM500 Div1 500 没想到 double 的精度居然没有爆-- 考虑以 ...
- TopCoder SRM502 Div1 1000 动态规划
原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-1000.html SRM502 Div1 1000 题意 从 [0,n-1] 中选择 k 个不同的 ...
- 2018.09.22 ZJOI2005午餐(贪心+01背包)
描述 上午的训练结束了,THU ACM小组集体去吃午餐,他们一行N人来到了著名的十食堂.这里有两个打饭的窗口,每个窗口同一时刻只能给一个人打饭.由于每个人的口味(以及胃口)不同,所以他们要吃的菜各有不 ...
- [HDOJ3466]Proud Merchants(贪心+01背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3466 n个商人,每个商人有一个物品,物品有价格p.价值v还有一个交易限制q.q的意义是假如你现在拥有的 ...
- hdu 5501 The Highest Mark(贪心+01背包)
题意:类似cf的赛制,每道题目有A,B,C三个值,A表示初始分数,B表示每分钟题的分数会减少B,C表示做这道题需要C分钟,数据保证分数不会变为负数.现在给出比赛时长,问安排做题的顺序,求最大得分. 思 ...
- HDU 2546 饭卡【贪心+01背包】
饭卡 Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- D - Digging(01背包,贪心)
D - Digging Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%lld & %llu Submit St ...
随机推荐
- springcloud-1: 用官方的pom.xml配置添加依赖失败
在eclipse中用STS生成了一个springcloud应用,pom.xml的核心配置如下: <parent> <groupId>org.springframework.bo ...
- hybrid programming based on python and C/C++
Python/C API Reference Manual¶ https://docs.python.org/3/c-api/index.html Extending and Embedding th ...
- Spring与Quartz实现定期任务
<!-- 任务调度测试实现一 : 自定义的任务对象com.bocloud.equipment.test.ExampleJob 必须继承QuartzJobBean类,实现抽象方法executeIn ...
- 图解Metrics, tracing, and logging
Logging,Metrics 和 Tracing 最近在看Gophercon大会PPT的时候无意中看到了关于Metrics,Tracing和Logging相关的一篇文章,凑巧这些我基本都接触过, ...
- Golang并发模型之Context详解
对于 Golang 开发者来说context(上下文)包一定不会陌生.但很多时候,我们懒惰的只是见过它,或能起到什么作用,并不会去深究它. 应用场景:在 Go http 包的 Server 中,每一个 ...
- oracle提高查询效率的34条方法
注:本文来源:远方的守望者 <oracle提高查询效率的34条方法> oracle提高查询效率的34条方法 1.选择最有效率的表名顺序 (只在基于规则的优化器中有效): ORACLE的解 ...
- JS 实现的浏览器系统通知 iNotify.js
注:本分非原创:信息来源 oschina 授权协议:MIT 开发语言:JavaScript 操作系统:跨平台 软件作者:同一种调调 iNotify.js 详细介绍 JS 实现浏览器的 title 闪烁 ...
- vuecli3初尝试(转载)
https://segmentfault.com/a/1190000016423943 在vue-cli3中安装element-ui 其中两种方式自己选择 格式化代码 使用yarn lint命令自动格 ...
- usrp使用
首先打开linux 输入uhd_find_divice gqrx
- java Properties (属性集)
加载Properties Properties downloadLog = new Properties(); try { //加载logFile文件 downloadLog.load(new Fil ...