最小拦截系统Hdu1257 dp
2015-11-19 18:16
260 查看
最少拦截系统
Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)Total Submission(s) : 47 Accepted Submission(s) : 19
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.
Input
输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是不大于30000的正整数,用空格分隔)Output
对应每组数据输出拦截所有导弹最少要配备多少套这种导弹拦截系统.Sample Input
8 389 207 155 300 299 170 158 65
Sample Output
2
Source
好方法:dp:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int h[1000000],a[1000000],f[10000][10000]; int max(int a,int b) { return a>b?a:b; } int main() { int n; while(scanf("%d",&n)!=EOF) { int i,j,l; for(i=0;i<n;i++) { scanf("%d",&h[i]); a[i]=h[i];//存入两个数组 } f[0][0]=0; sort(a,a+n);//升序排列 for(i=0;i<n;i++)//类似于,找两个串的最长公共串 for(j=0;j<n;j++) { if(a[i]==h[j]) f[i+1][j+1]=f[i][j]+1; else f[i+1][j+1]=max(f[i+1][j],f[i][j+1]); } printf("%d\n",f ); } return 0; }
法二:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; int a[1000000],sum[1000000]; int main() { int n; while(scanf("%d",&n)!=EOF) { int i,j,max1=0; for(i=1;i<=n;i++) { scanf("%d",&a[i]); sum[i]=1; for(j=1;j<i;j++) { if(a[j]<=a[i]) if(sum[i]<=sum[j]+1) sum[i]=sum[j]+1; } max1=max(max1,sum[i]); } printf("%d\n",max1); } return 0; }
法三:
#include <iostream> #include<cstdio> using namespace std; int main() { int n,i,j,k,a[30003],b[30003]; while(scanf("%d",&n)!=EOF) { b[0]=0; k=0; for(i=0; i<n; i++) { scanf("%d",&a[i]); { for( j=0; j<=k; j++) { if(a[i]<b[j]) { b[j]=a[i]; break;\\如果后面的高度比前面的小,则把后面的代替前面的。 } else if(j==k) { k++; b[k]=a[i]; break;\\当后面的高度比前面各系统的最小高度都大时,则系统增加1, \\此时此系统的最小高度为当前值。 } } } } printf("%d\n",k); } return 0; } //此题的关键在于只能拦截比上一高度小的导弹,故把最小值存进一数组, 再把后面的高度和这些最小值进行比较。比最小值小则换,比最小值大则系统增加。
相关文章推荐
- devenv.exe 中的 处有未经处理的异常
- 黄聪:如何阻止iframe里引用的网页自动跳转
- java 每日习题(六)从文件收集数据记录到mysql
- 无法访问您试图使用的功能所在的网络位置
- 获取单个checkbox选中项
- Android带边框表格的实现
- 《大象-Think In UML》读书笔记1
- URL传值符号转换
- Java中利用socket实现简单的服务端与客户端的通信(入门级)
- PHP对大文件的处理思路
- 第二天 Python列表的使用
- android 遍历所有控件
- <3> go 枚举
- json datatime convert
- 获取视频的缩略图
- json datatime convert
- CentOS6.X安装vsftpd服务
- 简答的 javascript 函数调用
- Android基础入门教程——10.8 LayoutInflater(布局服务)
- mongodb集群搭建