上一页 1 2 3 4 5 6 7 8 ··· 18 下一页
View Code #include<stdio.h>#include<string.h>int a[50003];int f[50003], g[50003];#define inf 1000000000int max(int a, int b) { return a > b ? a : b;}int main(){ int i, j, cas, n; scanf("%d", &cas); while(cas--) { scanf("%d", &n); for(i = 1; i <= n; i++) Read More
posted @ 2012-11-15 13:48 To be an ACMan Views(162) Comments(0) Diggs(0)
注意边界View Code #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define inf 1000000000int max(int a, int b) {return a > b ? a : b;}int n, m;int a[103][103], dp[103][103];int main(){ int i, j; while( ~scanf("%d%d", &n, &m)) { for(i = 1; i Read More
posted @ 2012-11-15 08:48 To be an ACMan Views(160) Comments(0) Diggs(0)
记忆化搜索:View Code #include<stdio.h>#include<string.h>#include<string>#include<iostream>#include<algorithm>using namespace std;#define inf 1000000000struct node{ int v, vis; // v 表示DP的值,加入的最少的括号个数,vis表示dp这一个状态是否被更新 string s; // 保存要输出的路径, string使用很方便,但时间相当费啊}dp[103][103];st Read More
posted @ 2012-11-14 20:29 To be an ACMan Views(209) Comments(0) Diggs(0)
注意初始化View Code #include<stdio.h>#include<string.h>int dp[103][103];char a[103], b[103];int f[7][7];#define inf 1000000000int max(int a, int b, int c){ int x = a > b ? a : b; return x > c ? x : c;}void init(){ for(int i = 1; i <= 4; i++) f[i][i] = 5; f[1][2] = f[2][1] = -1; f[1][ Read More
posted @ 2012-11-14 15:03 To be an ACMan Views(162) Comments(0) Diggs(0)
红色表示已经A。打星号的表示个人认为比较经典,或是算法比较好的题目1014* Dividing 半个背包,注意中断,否则可能TLE1036 Gangsters 可以很水的DP过,还有多种优化的方法1038* Bugs Integrated, Inc.状态压缩1050 To the Max最大子矩形 枚举每个列数为n的矩阵,然后对这些矩阵分别进行DP处理1080 Human Gene Functions最长公共子序列拓展,此题不连续,注意初始化1088滑雪 记忆化DP1141* Brackets Sequence括号序列 经典区间DP1157 LITTLE SHOP OF FLOWERS 注意. Read More
posted @ 2012-11-14 13:34 To be an ACMan Views(4632) Comments(0) Diggs(0)
题意:一群匪徒要进入一个酒店。酒店的门有k+1个状态,每个匪徒的参数是:进入时间,符合的状态,携带的钱。酒店的门刚开始状态0,问最多这个酒店能得到的钱数。思路1:dp[i][j]表示时间0-i之间,门的状态为j时所能获得的最大利益转移方程 :dp[i][j]=max(dp[i-1][j],dp[i-1][j-1],dp[i-1][j+1])因为转移i只跟i-1有关,所以可以用滚动数组dp[2][k]有一个处理边界的好方法:j的范围 0 —k,不妨向右移动1位,并保证0,k+2时的状态为0代码1:View Code //O(k*t)#include<stdio.h>#include& Read More
posted @ 2012-11-10 19:44 To be an ACMan Views(1107) Comments(0) Diggs(0)
让物体的重量等于价值,用总价值的一半的包去装这些物品,看其是否能装满View Code #include<stdio.h>#include<string.h>int dp[120005], a[8];int max(int a, int b) { return a > b ? a : b;}int main(){ int i, j, cas = 1, n, m; while( ~scanf("%d", &a[1]) ) { int sum = a[1]; for(i = 2; i <= 6; i++) { ... Read More
posted @ 2012-11-10 15:32 To be an ACMan Views(328) Comments(0) Diggs(0)
关键:很巧妙的枚举思路,枚举回文字符串中间字符的位置i,复杂度O(n),然后统计 以i为起始位置的回文串的个数放在数组p[]中,以末尾位置的回文串的个数放在数组q[]中。最后处理一下即可View Code #include<stdio.h>#include<string.h>#define lld __int64char s[2006];int p[2006], q[2006];lld ans;int main(){ int i, j; int l = strlen(gets(s+1)); int a, b; for(i = 1; i <= l; i++) ... Read More
posted @ 2012-11-08 13:58 To be an ACMan Views(215) Comments(0) Diggs(0)
边双连通分量求解要点:1.通过割点找变双连通分量。2.点入栈,当前边(u->v)的v点等于栈顶的点时停止出栈。3.每个割点可能属于多个连通分量。G++ AC,哪位大神帮忙改成C++ ACView Code #include<stdio.h>#include<string.h>#include<algorithm>#include<vector>using namespace std;#define maxn 1010#define maxm 1000009bool map[maxn][maxn];int min(int a, int b) Read More
posted @ 2012-11-05 16:22 To be an ACMan Views(223) Comments(0) Diggs(0)
注意:去掉反向边View Code #include<stdio.h>#include<string.h>#include<algorithm>using namespace std;#define maxn 10004#define maxm 100055#define inf 1000000000int min(int a, int b){ return a < b ? a : b;}struct E{ int v, next;}edge[maxm<<1];int head[maxn], tot;int n, m;void add(in Read More
posted @ 2012-11-01 20:57 To be an ACMan Views(177) Comments(0) Diggs(0)
上一页 1 2 3 4 5 6 7 8 ··· 18 下一页