1. 程式人生 > >題解報告:hdu 1257 最少攔截系統

題解報告:hdu 1257 最少攔截系統

clas size 當前 for main 比較 http color 替代

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1257

解題思路:題目的關鍵句是“第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能超過前一發的高度.”這句話的意思就是給你一組數據,從頭到尾選出需要攔截系統的高度(較小值),做法是依次保存現在每個攔截系統能攔截的最高的高度,接下來輸入的每一個高度,依次和這若幹攔截系統的現在所能攔截的最高高度進行比較,若某次小於這個高度,就替代這個高度,(並直接退出當前循環);若比這些攔截系統的高度都高,就重新創造一個攔截系統。


測試數據:8 7 6 5 6 3 2 4 1
答案:2(0 2 4)

AC代碼:

 1 #include<bits/stdc++.h>
 2
using namespace std; 3 int a,b[100000];//a為導彈的高度,b數組來保存攔截系統能夠攔截的高度 4 int main() 5 { 6 int n,cnt,j; 7 while(cin>>n){ 8 memset(b,0,sizeof(b));//b用來保存攔截系統能夠攔截的最大高度 9 cnt=0;//計算攔截系統的個數 10 for(int i=0;i<n;i++){ 11 cin>>a; 12 for(j=0;j<=cnt;j++)//
每次都用較小的高度來替換b中的數值 13 if(b[j]>=a){b[j]=a;break;}//如果攔截系統能夠攔截就攔截 14 if(j>cnt)b[++cnt]=a;//如果攔截系統都不能夠攔截,就只能夠再重新用一個攔截系統了 15 } 16 cout<<cnt<<endl; 17 } 18 return 0; 19 }

題解報告:hdu 1257 最少攔截系統