2012年4月18日
摘要: 由于添加字母和删除字母的效果是一样的,因此我们这里就只进行删除和替换操作。用f【i】【j】表示将第i到j之间的字串变成回文串的最小操作步数,然后转移方程为当s【i】!=s【j】时,f【i】【j】 = min( f【i+1】【j】 ,f【i】【j-1】,f【i+1】【j-1】)+1;当相等时f【i】【j】 =f【i+1】【j-1】;递归操作更方便;#include<stdio.h>#include<string.h>#define MAXN 1010#define INF 0x7fffffffchar s[MAXN];int n, f[MAXN][MAXN];int dp 阅读全文
posted @ 2012-04-18 22:16 BFP 阅读(217) 评论(0) 推荐(0) 编辑
摘要: 这道题考察的是这样的一个问题,在m行的第一列中找一些数,计算它们之和的平方,然后再计算对应的第二列中的那些数的和的平方,这两个数之和为s2就可以了。这里我借鉴了二维费用的背包问题,易于理解,速度还可以。代码如下:#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXN 45int n, m, s;int a[MAXN][2], f[310][310], x[310], y[310];void solve(){ int p = 0; int min = 0x7fffffff; for(i 阅读全文
posted @ 2012-04-18 15:48 BFP 阅读(317) 评论(0) 推荐(0) 编辑