首页 > 其他分享 >洛谷 P1233 木棍加工(贪心,递增子串DP)

洛谷 P1233 木棍加工(贪心,递增子串DP)

时间:2022-12-12 19:36:08浏览次数:67  
标签:洛谷 int pos cost P1233 lis arrmv 矩形 DP


题目大意:

有矩形A1,A2... ... An. 每个矩形有长宽w,h。现在已知cost:

(1)若矩形a的w,h小于矩形b的w,h,那么没有cost

(2)其它情况cost+1.

现在已知矩形A1,A2... ,问怎么得到最少cost.

解题思路:

首先,我们要用贪心。这里有一个最优边界,若矩形a1,a2,a3互不包含(即cost肯定有3,之间长宽没有包含关系).

所以,最优边界就是最大互不包含的矩形数!这个是本题的关键结论,要证明,我们可以用反证法。

若我们找到5个这种不包含的矩形,其它的所有的矩形肯定在这些矩形的内部,若有矩形不包含于这5个矩形,那么和最多不相交矩形数矛盾,所以我们可以证明最少cost等于 最多互不包含的矩形数。

然后我们要找到互不包含的矩形数,这里我们首先对w从大到小排列,然后h找最长的单调递增序列。

序列长度即为cost,我们可以证明这个就是互不包含的矩形数。

废话:这题贪心告诉我们,一定要想办法证明最优边界,提出自己的猜想。

另外,先排序再找最长单调递增子串这种tricky的做法也可以学习。

#include <bits/stdc++.h>
using namespace std;
const int MAXN = 5010;
bool cmp(pair<int, int> fir, pair<int, int> las) {
if (fir.first <= las.first && fir.second <= las.second)return false;
else return true;
}
int main() {

int n; cin >> n;
vector<pair<int, int>> arrmv;
for (int i = 0; i< n; i++) {
int a, b; cin >> a >> b;
arrmv.push_back(make_pair(a, b));
}
vector<int> L(MAXN);
int P[MAXN];
int P_id[MAXN];
int lis = 0;
int lis_end;
sort(arrmv.begin(), arrmv.end(), greater<pair<int, int>>());
vector<int> L2;
for (int i = 0; i < n; i++) {
L2.push_back(arrmv[i].second);
}
for (int i = 0; i<n; i++) {
int pos = lower_bound(L.begin(), next(L.begin(), lis), L2[i]) - L.begin(); //maybe cmp ...
L[pos] = L2[i];
P_id[pos] = i;
P[i] = pos == 0 ? -1 : P_id[pos - 1];
if (pos == lis) {
lis_end = i;
lis = pos + 1;
}
}

int count = 0;
for (int poi = lis_end; poi != -1; poi = P[poi]) {
count++;
}
cout << count << endl;
return 0;
}

 

标签:洛谷,int,pos,cost,P1233,lis,arrmv,矩形,DP
From: https://blog.51cto.com/u_15910522/5931535

相关文章

  • 拼多多 2020校招 多多的电子字典(字典树前缀搜索,DP)
    多多鸡打算造一本自己的电子字典,里面的所有单词都只由a和b组成。每个单词的组成里a的数量不能超过N个且b的数量不能超过M个。多多鸡的幸运数字是K,它打算把所有满足条件的......
  • leetcode 139. 单词拆分(BFS 或者 DP)
    题目大意:给定一个非空字符串s和一个包含非空单词列表的字典wordDict,判定 s是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。......
  • 洛谷 P1057 传球游戏(背包DP)
    题目大意:有n个人围成一圈,每个人可以把手上的球传给左边或者右边,现在小明开始传球,问m次后,把球传回给自己的次数。解题思路:考虑DP,使用带记忆的DP, 首先我们的状态可以设为[还......
  • 7天7个云实验(阿里云版) | Day 1-基于ECS部署WordPress
    在前面我们介绍过云计算的7个核心产品/服务,而只是看文章、看视频学习效果有限,而通过动手实验的方式来操作一遍,能够更容易、更扎实的掌握云服务。本期《7天7个云实验》将会介......
  • 基于DSP+ZYNQ平台Zynq7035/45 FPGA高速串行接口的千兆以太网UDP例程设计和使用说明
         Xines基于XilinxXC7Z035/45-2FFG676I自研平台XQ6657Z35-EVM的Zynq7035/45PL端高速串行接口,使用千兆以太网通讯方式来测试验证底板上的光口通信,实现以下以......
  • 洛谷 P5143 攀爬者 题解
    原题链接P5143攀爬者解析内心OS第一眼看上去:他**滴,这么离谱的公式,这还是正常的橙题吗?1分钟后······这么简单的题,还好意思当橙题?(请忽略上方内容)......
  • 「题解」洛谷 P8850 [JRKSJ R5] Jalapeno and Garlic
    2022.12upd:原先代码锅了,重写了一份。看上去是比较常规的题,应当需要更灵敏的直觉和更快的速度解决这道题。首先考虑若已经确定一个\(x\),那么贪心修改策略就是随便找一个......
  • 「题解」洛谷 P8848 [JRKSJ R5] 1-1 B
    首先不考虑只有\(1\)或者只有\(-1\)的平凡情况。令\(z\)为\(1\)的个数,\(f\)为\(-1\)的个数,若有\(f\geqz\),那么可以构造使得最大子段和为\(1\)(因为有\(1\)......
  • DPI、PPI和Android的应用开发单位dp
    概念dpi是dotperinch,每英寸多少点ppi是Pixelperinch,每英寸像素数针对显示器的设计时ppi表示显示设备的点密度,dpi表示印刷品点密度.dip或dp,是安卓开发用的单位,1dp表......
  • MaxCompute的odpscmd使用或Studio
    阿里云MaxCompute的odpscmd安装和配置阿里云MaxCompute的推荐阿里云MaxCompute的Tunnel命令使用Tunnel命令参数中文解释配置文件odps_config.ini需要修改的内容  ......