hdu1257 最少拦截系统 ——DP么?

June 1, 2013
Hdu

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1257 题目大意:   中文的…… 题目思路:   人家说是DP,求最长不升子序列的个数。好吧……我不是那么做的。   我的思路是,从前往后扫一遍,访问过的标记为true,记录一下个数就OK了。


#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
using namespace std;
int b[1000];
bool a[1000];
int main(void) {
  int n;
#ifndef ONLINE_JUDGE
  freopen("1257.in", "r", stdin);
#endif
  while (~scanf("%d", &n)) {
    int i, j, cnt = 0;
    for (i = 0; i < n; ++i) scanf("%d", b+i);
    memset(a, false, sizeof(a));
    for (i = 0; i < n; ++i) {
      while (a[i]) ++i;
      if (i == n) break;
      if (!a[i]) cnt++; a[i] = true; j = i;
      int tmp = b[j];
      while (j < n-1) {
        if (!a[j+1] && b[j+1] <= tmp) {a[j+1] = true; tmp = b[j+1];}
        ++j;
      }
      int k;
      for (k = 0; k < n; ++k) if (!a[k]) break;
      if (k == n) break;
    }
    printf("%d\n", cnt);
  }
  return 0 ;
}

写的时候还是出现了错误,最后还是发现了,幸亏自己出了一组数据,^_^

comments powered by Disqus