【hihoCoder 1454】【hiho挑战赛25】【坑】Rikka with Tree II

http://hihocoder.com/problemset/problem/1454
调了好长时间,谜之WA。。。
等我以后学好dp再来看为什么吧,先弃坑(╯‵□′)╯︵┻━┻

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int pp = 998244353;
const int N = 503;

int f[N][N], g[N][N], n;
char A[N], B[N];

int main() {
//	freopen("B.in", "r", stdin);
	scanf("%d", &n);
	scanf("%s%s", A + 1, B + 1);
	for (int i = 1; i <= n; ++i) {
		if (A[i] == '1') continue;
		g[i][i] = f[i][i] = 1;
	}
	
	if (B[1] == '1') {puts("0"); return 0;}
	
	for (int p = 2; p <= n; ++p)
		for (int j = p, i = 1; j <= n; ++j, ++i) {
			if (A[i] != '0') f[i][j] = g[i + 1][j];
			if (A[i] != '0') {
				if (B[i] == '0') g[i][j] = f[i][j];
				else {
					if (B[i] == '?') g[i][j] = f[i][j];
					for (int k = i; k < j; ++k)
						g[i][j] = (g[i][j] + ((int) (1ll * f[i][k] * g[k + 1][j] % pp))) % pp;
				}
			} else {
				if (B[i] != '0') g[i][j] = g[i + 1][j];
			}
		}
	
	printf("%d\n", f[1][n]);
	return 0;
}
posted @ 2016-12-25 21:59  abclzr  阅读(360)  评论(0编辑  收藏  举报