在kuangbin的DP專題裏找到的,然而有點坑的是並不是用DP做的。。。此題用貪心纔是正解啊~~,對於每一發導彈,若已經存在攔截系統,且可以攔截此導彈,那麼重新開一臺是沒意義的,因爲達到的效果和通過降低現有攔截系統高度來攔截所達到的效果是一樣的,當然若攔截不了那就另當別論去開一臺,問題是有多臺可以降低高度那麼選哪一臺呢?答案當然是選高度最低的且能攔截此導彈的系統,這會爲以後其他系統攔截留下餘地。這就是貪心策略,然後拿vector統計一下就好,我寫過的另一道貪心題比這道要簡單,但思路有相似之處,可以看一下~~(PS:博客鏈接)。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
//freopen("in.in","r",stdin);
int n;
while(scanf("%d",&n)!=EOF)
{
vector<int> v;
while(!v.empty())v.pop_back();
for(int i=1;i<=n;i++)
{
int x;
scanf("%d",&x);
int flag=-1;
int min_n=50000;
for(int i=0;i<v.size();i++)
if(v[i]>=x&&v[i]-x<min_n)
{
min_n=v[i]-x;
flag=i;
}
if(flag==-1)
v.push_back(x);
else
v[flag]=x;
}
printf("%d\n",v.size());
}
return 0;
}