|Tyvj|NOIP1999|動態規劃|貪心|P1878 攔截導彈
阿新 • • 發佈:2019-01-06
http://tyvj.cn/p/1878
第一問:最長不上升子序列dp
第二問:貪心
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main () { const int maxn = 100 + 5; int dd[maxn]; int n=0; int yyy; while (scanf("%d", &yyy)!=EOF) {n++; dd[n] = yyy;} int d[maxn]; d[1] = 1; int maxd = -1; for (int i=2;i<=n;i++) { d[i] = 1; for (int j=1;j<i;j++) { if (dd[j]>=dd[i]) { d[i] = max(d[i], d[j]+1); } } maxd = max(d[i], maxd); } printf("%d\n", maxd); int k = 1; //用了多少個機器 int ma[maxn];//機器攔截高度 ma[k] = dd[1]; for (int i=2;i<=n;i++) { int p = 0; for (int j=1;j<=k;j++) { if (ma[j]>=dd[i]) { if (p==0) p = j; else if (ma[j]<ma[p]) p = j; } } if (p==0) { k++; ma[k] = dd[i]; } else ma[p] = dd[i]; } printf("%d\n", k); return 0; }