TYVJ 1113 魔族密码 解题报告

  DP:f[i] = f[j] + 1 (1<= j < i, 且j是i的前缀.)

  代码如下:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char str[2001][501];
int f[2001];
int ans = 0;

int main(int argc, char **argv)
{
	int i, j;
	int n;
	scanf("%d", &n);
	for(i = 1; i <= n; i++){
		scanf("%s", str[i]);
	}
	for(i = 1; i <= n; i++){
		for(j = 1; j < i; j++){
			if(f[j] > f[i] && strncmp(str[i], str[j], strlen(str[j])) == 0){
				f[i] = f[j];
			}
		}
		f[i]++;
		if(ans < f[i]){
			ans = f[i];
		}
	}
	printf("%d\n", ans);
	return 0;
}
posted @ 2011-08-06 14:49  zqynux  阅读(223)  评论(0编辑  收藏  举报