首页 > 其他分享 >【DP 记录】AcWing 734. 能量石

【DP 记录】AcWing 734. 能量石

时间:2022-08-18 20:37:23浏览次数:89  
标签:顺序 frac 01 背包 734 最优 AcWing DP 贪心

传送门

给你几个物品,每种选一次,求最大价值,首先想到 01 背包,但是我们遇到了一个问题:

普通的 01 背包在选择物品时是不讲求顺序的,但在这道题中,物品的选择是有顺序的(即对最优解贡献有顺序),显然 \(O(n!)\) 枚举排列不可取,那我们能否提前确定好顺序,再来做背包呢?

$\bullet\ $ 考虑从贪心解入手

对于贪心解,我们得到一组排列 \(a_1,a_2,\ldots,a_n\) ,其中任选相邻的一对 \(i\) 和 \(j\),我们将其交换位置,所得的新的解一定不增(否则就贪心地选这个顺序了),即它们的总贡献(注:能交换邻项的条件是改变它们顺序不影响其他项的结果

\[E_i+E_j-S_i\times L_j \geq E_i+E_j-S_j\times L_i \]

消掉一些项,将有关 \(i\) 的移到左边,得

\[\frac{S_i}{L_i} \leq \frac{S_j}{L_j} \]

即我们可以按照这样排序,得到最优的顺序来背包。

$\bullet\ $ 如何证明贪心解即为最优解?

对于最优解的排列方式,我们可以将满足 \(\frac{S_i}{L_i} > \frac{S_j}{L_j}\) 的相邻两项交换,其解一定不降,所以 贪心解 ≥ 最优解。又因为,贪心解一定是合法解,所以 贪心解 ≤ 最优解,故 贪心解 = 最优解

new trick: 邻项交换法!

提交记录

标签:顺序,frac,01,背包,734,最优,AcWing,DP,贪心
From: https://www.cnblogs.com/RuntimeErr/p/16599959.html

相关文章

  • 一种关于低代码平台(LCDP)建设实践与设计思路
    简介: 作者在负责菜鸟商业中心CRM系统开发过程中发现有一个痛点:业务线很多,每个业务线对同一个页面都有个性化布局和不同的字段需求,而他所在的团队就3个人,那么在资源有限的......
  • 区间DP の 题(内含 最长回文串,石子合并,删除字符串,乘积最大,释放囚犯)
    乘积最大  由于题目给定的是m,需要分解成m+1部分的乘积,不难想到乘号刚好是m个,那么该题就转化成了m个乘号的插入方式。  最优子结构分析:    设数字字符串为a1a......
  • [AcWing 166] 数独
    DFS+剪枝+位运算优化点击查看代码#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=9,M=1<<N;intones[M];//on......
  • acwing204.表达整数的奇怪方式(中国剩余定理)
    中国剩余定理中国剩余定理百度百科不定方程\(ax+by=gcd(a,b)\)的解先用扩展欧几里得算法求得不定方程的一组特解:\(x_0,y_0\)则不定方程的通解为\[\left\{\begin......
  • [AcWing 165] 小猫爬山
    DFS剪枝点击查看代码#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=50+10;intn,m;intw[N];intsum[N];//每组......
  • [题解] HDU 5115 Dire Wolf 区间DP
    考虑先枚举所有的物品中最后拿走的,这样就分成了2个子问题,即先拿完左边的,再拿完右边的,最后拿选出的那个。令dp(i,j)表示拿完[i,j]所有物品的最小代价。你可能会说,我们拿[i,j......
  • acwing2022秋招每日一题 1302. 层数最深叶子节点的和
    题目给你一棵二叉树的根节点 root ,请你返回 层数最深的叶子节点的和 。思路根据层序遍历,访问所有节点。将每一层上的结点,进行统计,直到最后一层时,统计所有节点数。......
  • 计数类组合数DP(玩个球)A3
    n种颜色的球,每种m个,给出一个这些球的排列,就会从左往右把第一个遇到的某种颜色涂白。问有多少不一样的颜色序列(n,m<=2000)发现白色的球都一样,当成一种算,我们只关注当前:(1)白......
  • [AcWing 1118] 分成互质组
    DFS点击查看代码#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=50+10;intn;inta[N];intlen,ans=1e9;vector<i......
  • Chiitoitsu(概率DP)
    代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<map>usingnamespacestd;typedeflonglongll;constintN=1......