最长上升子序列,尼玛,用scanf输入TLE,gets AC。
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <string>
using namespace std;
const int MAXN = 1010;
char x[MAXN], y[MAXN];
int d[MAXN][MAXN];
int dp(int n, int m)
{
for(int i = 1; i <= n; i++) d[i][0] = 0;
for(int i = 1; i <= m; i++) d[0][i] = 0;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= m; j++)
{
if(x[i-1] == y[j-1]) d[i][j] = d[i-1][j-1]+1;
else if(d[i-1][j] >= d[i][j-1]) d[i][j] = d[i-1][j];
else d[i][j] = d[i][j-1];
}
}
return d[n][m];
}
int main()
{
int times = 0;
while(gets(x) && strcmp(x, "#"))
{
gets(y);
int n = strlen(x), m = strlen(y);
int ans = dp(n, m);
printf("Case #%d: you can visit at most %d cities.\n", ++times, ans);
}
return 0;
}