随笔分类 - DP
poj 2029 Get Many Persimmon Trees
摘要:http://poj.org/problem?id=2029给个大矩阵 上面有一些点再给个小矩阵 问小矩阵最大可以包含多少个点代码:#include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;const int N=105;int a[N][N];int b[N][N];//x范围仅为1 y范围为 h 的和int sum[N][N];//x范围为w y范围为 h 的和int main(){ int n; int W,H; i
阅读全文
poj 3280 Cheapest Palindrome
摘要:http://poj.org/problem?id=3280给一个字符串可以再任意位置添加或删除字母(给出花费的) 使得字符串变成回文思路:其实添加和删除的性质是一样的添加一个字母和删去相对应的字母 对于使原文变成回文的贡献是一样的 所以我们取花费的时候 只取小的花费为了理解方面统一用删除吧从两端进行遍历1 如果对应相等 则直接去掉就可以 (无需花费)2 如果只有一个字符了 直接去掉 (无需花费)3否则选择删掉左边 和 删掉右边 两种情况中最优的(只有给出花费才能删)代码及其注释:#include<iostream>#include<stdio.h>#include&l
阅读全文
poj 1191 棋盘分割
摘要:http://poj.org/problem?id=1191DP 一不小心开了个五维数组double ans[k][x1][y1][x2][y2] 表示(x1,y1)到(x2,y2)可以割k次时与平均数最小平方和代码:#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<cmath>#include<queue>#include<algorithm>#include<set>using namespac
阅读全文
poj 3661 Running
摘要:http://poj.org/problem?id=3661二维DP#include<iostream>#include<cstring>#include<string>#include<cmath>#include<cstdio>using namespace std;const int N=10005;const int M=505;int L[N];int rest[N][M];int norest[N][M];int main(){ int n,m; while(scanf("%d %d",&n,&
阅读全文
hdu 1054 Strategic Game
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1054树形DP 主要是把思路屡清楚选个根结点进行向下搜 每个点都有两种可能 放士兵还是不放防止重复搜索就可以#include<iostream>#include<string>#include<string.h>#include<queue>#include<math.h>#include<stdio.h>#include<algorithm>#include<map>using namespace std;con
阅读全文
poj 2151 Check the difficulty of problems
摘要:http://poj.org/problem?id=2151dp不是问题 问题在于这是道数学题 亲人呀 最恨数学题尤其是和概率有关 代码很乱呀 有木有#include<iostream>#include<string>#include<string.h>#include<queue>#include<math.h>#include<stdio.h>#include<map>using namespace std;double probability[1005][35];double a[35][35];doub
阅读全文
poj Finicky Grazers 3184
摘要:http://poj.org/problem?id=3184动态规划 加各种优化二维数组太大 需要用滚动数组题目大意: 给你N头牛 和(0--L)L+1个位置 在满足牛之间距离最大化的前提下移动牛花费时间最少首先第一头牛必须在 0 这个位置 第N 头牛必须在 L 这个位置D=L/(N-1);如果L%(N-1) 余数不为 0时 存在 D+1本题关键在于 每头牛所在位置 都有一定的范围用函数 findlr(int i,int &l,int &r)求范围 i代表第几头牛 l和r分别为左右边界其他详情见代码注释#include<iostream>#include<st
阅读全文
hdu 2159 FATE
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2159二维DP 并不是很难#include<iostream>#include<stdio.h>#include<algorithm>#include<string.h>#include<string>using namespace std;struct node{ int a,b;}mem[101]; //a表示经验值 b 表示所需忍耐度int n,m,k,s;int ans[101][101];//ans[i][j]表示用i个忍耐度最多杀j个怪所
阅读全文
hdu 1011 Starship Troopers
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1011一个寒假没做题了 手生了 对于树形DP我一般用孩子兄弟的思路还是英语不行呀 读题读不懂是所走路径的叶子结点的话 需留下一个兵才能获得洞中brain#include<iostream>#include<stdio.h>#include<string.h>#include<string>#include<algorithm>using namespace std;struct node{ struct next *next;}head[101];
阅读全文
hdu 1561 The more, The Better
摘要:树形DP 此代码还可以优化ans[i][j] 代表以i节点的子树 攻j个城堡 的最优值详解见代码注释http://acm.hdu.edu.cn/showproblem.php?pid=1561#include<iostream>#include<string>#include<string.h>#include<queue>#include<math.h>#include<algorithm>#include<vector>#include<stdio.h>#define Max 0x7ffffff
阅读全文
ural 1167. Bicolored Horses
摘要:ans[i][j]表示 第i个马厩放到第j只马时的最小不高兴值blacksum[i]表示到第i只马时的黑马数详解见代码注释http://acm.timus.ru/problem.aspx?space=1&num=1167#include<iostream>#include<string>#include<string.h>#include<queue>#include<math.h>#include<algorithm>#include<vector>#include<stdio.h>#de
阅读全文
ural 1039. Anniversary Party
摘要:树形DP所有DP的思想应该都是一样的 只是换了形式而已用邻接表储存领导和下属的关系 表头表示领导从树根开始递归 以叶子节点为截止点joinsum[i] 表示 第 i 个人参加时最大高兴值 若i参加 他的下属则不能参加unjoinsum[i] 表示 第 i 个人不参加的最大高兴值 若i不参加 他的下属有参加和不参加两种情况 选较大的情况http://acm.timus.ru/problem.aspx?space=1&num=1039#include<iostream>#include<stdio.h>#include<string.h>#include
阅读全文
hdu 1080 Human Gene Functions
摘要:二维DP先把四种字符映射成整数 空格为 4 然后将对应的相似程度值存入sim 数组中以便查找ans[i][j] 表示 a 中第 i 个与 b 中第 j 个为最后时的最大相似程度值其中包括 a[i] 与b[j]成对 a[i]与 空格成对 空格与b[j]成对三种情况要取最大的一种情况以 0 0 为截止点http://acm.hdu.edu.cn/showproblem.php?pid=1080#include<iostream>#include<stdio.h>#include<string.h>#include<algorithm>#include
阅读全文
hdu 1028 Ignatius and the Princess III
摘要:二维DP我感觉DP最重要就是找到递推公式和截止点ans[i][j]表是n为i 时 组合成i的若干个数中最大为j(至少有一个为j)的 种数不知数据多大 直接用了64位http://acm.hdu.edu.cn/showproblem.php?pid=1028#include<iostream>#include<string.h>#include<algorithm>#include<stdio.h>using namespace std;__int64 ans[121][121];__int64 dp(int i,int j){ if(ans[i]
阅读全文
ural 1203. Scientific Conference
摘要:简单DPhttp://acm.timus.ru/problem.aspx?space=1&num=1203#include<iostream>#include<string.h>#include<algorithm>using namespace std;int f[30001];//下标表示结束点 所存数据为最晚开始的那个int ans[30001];//ans[i]表示到这个点时最多参加数int main(){ int n,i,l,T; cin>>n; for(i=0;i<30001;i++) f[i]=i;//f[i]==i
阅读全文
hdu 2571 命运
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=2571二维数组 简单 递推
阅读全文
poj 2355 Railway tickets
摘要:简单DP wa了好几次 原来0x7ffffff的默认大小为2^27还要注意 输入2 6 和6 2 一样http://poj.org/problem?id=2355#include<iostream>#include<string.h>#include<math.h>#include<stdio.h>#include<algorithm>#include<string>#define min(a,b)a>b?b:a#define Max 10000000001using namespace std;long l1,l2
阅读全文
ural 1119. Metro
摘要:看完题直接 二维数组做的 MLE了可以转换一下思路每走一个折线 就节约(200-sqrt(2)*100)所以可以求最多可走多少折线块 从总路中减去节约的就可以了http://acm.timus.ru/problem.aspx?space=1&num=1119#include<iostream>#include<stdio.h>#include<math.h>#include<string>#include<map>#include<queue>#include<algorithm>#include<
阅读全文
浙公网安备 33010602011771号