UVa 10066 - The Twin Towers
2012-04-02 10:06
417 查看
一看就知道是lcs,10分钟敲好了代码,通过示例,一提交MLE,明白了没有保存中间结果;
再次提交,打开邮箱,一直F5,等了很长时间没反应,难道又MLE了?结果回到题目页面,发现了下面这句话:
You have to select a programming language.
。。。
再次提交WA:没有把ans[]初始化为-1;
最终花了25分钟才AC了,教训啊!
再次提交,打开邮箱,一直F5,等了很长时间没反应,难道又MLE了?结果回到题目页面,发现了下面这句话:
You have to select a programming language.
。。。
再次提交WA:没有把ans[]初始化为-1;
最终花了25分钟才AC了,教训啊!
# include <stdio.h> # include <memory.h> int N1, N2; int x[2]; int s1[101]; int s2[101]; int ans[101*101]; int lcs(int *x); int main() { int cnt, i; cnt = 0; while (1) { scanf("%d", &N1); scanf("%d", &N2); if (!N1 && !N2) break; for (i = 0; i < N1; ++i) scanf("%d", &s1[i]); for (i = 0; i < N2; ++i) scanf("%d", &s2[i]); x[0] = N1; x[1] = N2; memset(ans, 0xff, sizeof(ans)); printf("Twin Towers #%d\n", ++cnt); printf("Number of Tiles : %d\n\n", lcs(x)); } return 0; } int lcs(int *x) { int index, ret, rem; if (!x[0] || !x[1]) return 0; index = x[0]-1 + (x[1]-1)*N1; if (ans[index] >= 0) return ans[index]; if (s1[x[0]-1] == s2[x[1]-1]) { --x[0]; --x[1]; ret = lcs(x) + 1; ++x[0]; ++x[1]; } else { ret = 0; --x[0]; if ((rem = lcs(x)) > ret) ret = rem; ++x[0]; --x[1]; if ((rem = lcs(x)) > ret) ret = rem; ++x[1]; } ans[index] = ret; return ret; }
相关文章推荐
- UVA 10066 The Twin Towers
- UVA 10066 The Twin Towers
- UVa 10066 The Twin Towers
- UVA 10066 - The Twin Towers
- UVA 10066 - The Twin Towers
- UVA 10066 - The Twin Towers
- UVa 10066 - The Twin Towers
- UVa 10066: The Twin Towers
- uva 10066 The Twin Towers
- UVA - 10066 The Twin Towers
- uva_10066 The Twin Towers
- uva 10066 - The Twin Towers
- UVA 10066 The Twin Towers
- UVA 10066 The Twin Towers
- UVA10066 - The Twin Towers
- UVA - 10066 The Twin Towers
- uva 10066 The Twin Towers
- UVA 10066 The Twin Towers
- UVa 10066 - The Twin Towers
- UVa 10066 - The Twin Towers