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 ;
}
写的时候还是出现了错误,最后还是发现了,幸亏自己出了一组数据,^_^