hdoj1257(DP-LIS/贪心)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257
方法1--贪心:
定义一个数组f[30005],由于题目没给数据量大小,故为了保险,开到最大(高度的最大值)。f[i]表示第i套系统最后一发导弹的值。边输入边处理就行,若当前值可以使用之前的系统则更新该系统最后一发导弹的高度值,否则使用新系统。要注意的地方是判断当前输入的值是否可以使用已经存在的系统时,应从第一个系统开始往后遍历,因为越前面的系统其最后一发导弹的高度越低。比如,当前有两个系统分别是“100 50”和“101 70”,若当前输入的是30,则选择第一套系统更好,因为后面输入的50—70之间的值就可以使用第二套系统,这个地方好好想一下,最后输出系统个数就行了。详见代码:
#include<bits/stdc++.h>
using namespace std; int n,f[]; int main(){
while(scanf("%d",&n)!=EOF){
int k=,tmp;
bool suc;
while(n--){
suc=false;
scanf("%d",&tmp);
for(int i=;i<=k;i++)
if(tmp<=f[i]){
f[i]=tmp;
suc=true;
break;
}
if(!suc)
f[++k]=tmp;
}
printf("%d\n",k);
}
return ;
}
方法二--DP—LIS:
其实这道题的解就是数据的LIS的长度,关于LIS解法可以参考我的另一篇随笔:https://www.cnblogs.com/FrankChen831X/p/10384238.html。
仔细想一下LIS的O(nlogn)解法过程,实际上每次长度增加时就是本题的系统要加一,因此最终的LIS的每一个值就是每一个系统的最后一发导弹的高度值,每一个位置的更新过程就是每个系统对应的导弹的高度值。这里可以进一步加深对LIS解法过程的理解。代码如下:
#include<bits/stdc++.h>
using namespace std; int n,f[]; int main(){
while(scanf("%d",&n)!=EOF){
int tmp,len=;
scanf("%d",&tmp);
n--;
f[++len]=tmp;
while(n--){
scanf("%d",&tmp);
if(tmp>f[len]) f[++len]=tmp;
else if(tmp<=f[]) f[]=tmp;
else{
int l=,r=len,m;
while(l<=r){
m=(l+r)/;
if(tmp>f[m-]&&tmp<=f[m]) break;
if(tmp<f[m]) r=m-;
else l=m+;
}
f[m]=tmp;
}
}
printf("%d\n",len);
}
return ;
}
个人觉得这道题是考察的第二种解法,但由于数据量不大,故用第一种方法也行。
hdoj1257(DP-LIS/贪心)的更多相关文章
- hdu----(1677)Nested Dolls(DP/LIS(二维))
Nested Dolls Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tota ...
- P1095 守望者的逃离——DP?贪心?
https://www.luogu.org/problem/P1095 恶魔猎手尤迪安野心勃勃,他背叛了暗夜精灵,率领深藏在海底的娜迦族企图叛变.守望者在与尤迪安的交锋中遭遇了围杀,被困在一个荒芜的大 ...
- P2279 消防局的设立 (树形DP or 贪心)
(点击此处查看原题) 树形DP写法 看到这个题的要求,很容易相到这是一个树形DP的问题,但是dp数组应该如何设计并转移才是关键 dp[i][0]代表当前结点可以向上覆盖2层,自身一定被覆盖dp[i][ ...
- hdu 1257 最少拦截系统【贪心 || DP——LIS】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=1257 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- Vijos p1303导弹拦截(LIS+贪心)
传送门:https://vijos.org/p/1303 背景 实中编程者联盟为了培养技术精湛的后备人才,必须从基础题開始训练. 描写叙述 某国为了防御敌国的导弹突击,研发出一种导弹拦截系统. 可是这 ...
- cf 之lis+贪心+思维+并查集
https://codeforces.com/contest/1257/problem/E 题意:有三个集合集合里面的数字可以随意变换位置,不同集合的数字,如从第一个A集合取一个数字到B集合那操作数+ ...
- 洛谷P1108 低价购买[DP | LIS方案数]
题目描述 “低价购买”这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:“低价购买:再低价购买”.每次你购买一支股票,你必须用低于你上次购买它的价格购买它 ...
- dp or 贪心 --- hdu : Road Trip
Road Trip Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users: 29 ...
- hdu----(1257)最少拦截系统(dp/LIS)
最少拦截系统 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
随机推荐
- bzoj3143 游走
Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...
- request笔记记录
1.https请求报错解决方法,添加verify=False参数 r = requests.get(json=payload, headers=headers,verify=False) 1)由于这里 ...
- configure: error: You need a C++ compiler for C++ support.
安装pcre包的时候提示缺少c++编译器 报错信息如下: configure: error: You need a C++ compiler for C++ support. 解决办法,使用yum安装 ...
- 如何使用App.config文件,读取字符串?
如何使用App.config文件,读取字符串? .在项目里添加App.config文件,内容如下: <?xml version="1.0" encoding="ut ...
- kudu和kudu-impala的安装流程
安装apache的kudu 第一步:下载rpm包 http://archive.cloudera.com/kudu/redhat/6/x86_64/kudu/5.11.0/RPMS/x86_64/ 第 ...
- js基础和运算符
1.什么JavaScript? 运行环境 : 浏览器 是一种具有安全性的客户端的脚本语言 用来实现与web页面交互 脚本语言:语言嵌入到htm ...
- 柒月风华BBS上线
论坛地址:https://3003soft.top/LBBS/ 欢迎大家加入. 开放式轻论坛:记录好玩.有趣的事儿:一起努力,一起前进: 希望能建立一个分享各类解决方案的社区
- 2013年6月编程语言排行榜,C语言位据第一位
2013年6月编程语言排行榜,C语言位据第一位 C语言是很多主流开发语言的母体,.NET的底层,Java的底层都是C开发的,虽然很多新语言来势汹汹,但究其根源,都脱离不开C语言
- leetcode191
public class Solution { public int HammingWeight(uint n) { var list = new List<uint>(); do { ; ...
- 浅谈Http、TCP、UDP和 IP 的的区别
应用层:Http,超文本传输协议(HyperText Transfer Protocal):利用TCP在两台电脑(通常是Web服务器和客户端)之间传输信息的协议.客户端使用Web浏览器发起HTTP请求 ...