摘要: dpf[i][j] = max(f[i + 1][j] + sum(i + 1,j) + v[i],f[i][j - 1] + sum(i,j - 1) + v[j])View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define maxn 2005int n;int v[maxn];int f[maxn][maxn];int sum[maxn];void input(){ scanf(&qu 阅读全文
posted @ 2012-07-06 19:32 undefined2024 阅读(330) 评论(0) 推荐(0)
摘要: 模拟题View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define maxn 205int n, m, len;int f[maxn];char st[maxn];bool vis[maxn];int circle_num;int circle[maxn];int circle_length[maxn];char ans[maxn];void make(){ memset(vis, 0, s 阅读全文
posted @ 2012-07-06 14:16 undefined2024 阅读(178) 评论(0) 推荐(0)
摘要: 题意:要求用两两交换的方式给一个数列排序,交换f[i]和f[j]的代价为f[i]+f[j],求最小代价。分析:具体方法就是在数列中找置换环,每个环有两种处理方式,一种是用最小的元素将环里所有元素归位,另一种是用全数列最小元素与环内最小元素交换,并在环内用这个全数列最小元素将环里所有元素归位,再与原环内最小元素交换回来。View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using na 阅读全文
posted @ 2012-07-06 13:27 undefined2024 阅读(784) 评论(0) 推荐(0)
摘要: dp,f[i][j][k]表示用i个不同的素数相加等于k的方法数,且这i个素数只能在前j个数字中选。f[i][j][k] = f[i][j - 1][k] + f[i - 1][j - 1][k - w[j]];(w[j]为第j个素数的值)View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>using namespace std;#define maxn 1200#define maxr 20 阅读全文
posted @ 2012-07-06 10:44 undefined2024 阅读(188) 评论(0) 推荐(0)
摘要: 最大独立集,把不认识的男女看成是有矛盾的,要选出一些互相没有矛盾的男女。View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define maxn 205bool g[maxn][maxn];int uN, vN, m;int xM[maxn], yM[maxn];bool chk[maxn];void input(){ for (int i = 0; i < m; i++) { int 阅读全文
posted @ 2012-07-06 09:23 undefined2024 阅读(129) 评论(0) 推荐(0)
摘要: 简单题View Code #include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;#define maxn 2008int n;char line[maxn];void input(){ scanf("%d", &n); for (int i = 0; i < n; i++) { char ch[3]; scanf("%s", ch); line[i] = ch[0] 阅读全文
posted @ 2012-07-06 09:06 undefined2024 阅读(503) 评论(0) 推荐(0)