题意:
http://acm.hdu.edu.cn/showproblem.php?pid=1257
思路:
原来的思路为了让一个拦截系统拦截尽可能多的导弹,我就让后面只要顺序小于这个数的导弹都归他拦截(就是依次剔除递减序列,但其实并没有达到让每个拦截系统拦截尽可能多的导弹的作用)所以以后有了贪心思路多想几组数据。。而且从面对的最普通情况进行分析(多个拦截系统,选择让一个拦截系统去拦截,还是新建)
AC思路:为了每个拦截系统物尽其用,选择和他最靠近的拦截系统拦截,如果没有大于她的拦截系统就新建;虽然贪心我都基本证明不来,但是想到的时候就觉得毛估估还蛮有道理的(但总觉得不是无懈可击)
(然后关于DP的思路表示确实没能理解,如果有想通的好哥哥还请不吝赐教)
//
// main.cpp
// 170529-HDU1257
//
// Created by Xie on 29/05/2017.
// Copyright © 2017 meiyoumingzi. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
#define maxn 30005
#define INF 0x3f3f3f3f
using namespace std;
vector<int> v;
int main() {
int n,a;
while(cin>>n){
int ans=1;
for(int i=0;i<n;i++){
scanf("%d",&a);
if(i==0) v.push_back(a);
else {
int index=-1,Min=INF,j=0;
for(vector<int>::iterator it=v.begin();it!=v.end();it++){
if(*it>=a && Min>*it-a){
Min=*it-a;
index=j;
}
j++;
}
if(index==-1){
ans++;
v.push_back(a);
}
else v[index]=a;
}
}
cout<<ans<<endl;
v.clear();
}
return 0;
}