Problem: http://acm.hdu.edu.cn/showproblem.php?pid=1257
因为导弹是依次发射的没发改变其发射循序
直接贪心就好,每套拦截系统按循序拦截可拦截的导弹
剩下未被拦截的导弹就形成了一个新的导弹发射序列
#include<cstdio> int main() { int n,a[10000];//导弹高度 bool f[10000];//导弹是否被拦截 while(scanf("%d",&n)!=EOF){ for(int i=0;i<n;i++){ scanf("%d",&a[i]); f[i]=false; } int ans=0,k=0;//k,当前未被拦截的导弹的最小编号 while(!f[k]){ f[k]=true;//每套拦截系统拦截的第一枚导弹 ans++; int dh=a[k];//dh,最新拦截的导弹的高度 for(int i=k+1;i<n;i++){ if(!f[i] && a[i]<=dh){ f[i]=true; dh=a[i]; } if(!f[i] && f[k])k=i;//更新k } } printf("%d ",ans); } return 0; }
其实也可以换一种贪心方式,...黑黑