动态规划:DP
文章平均质量分 60
BRCOCOLI
初学者 记录成长 Fighting
展开
-
HDU 1227 Fast Food DP *
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1227状态很好定义,关键是怎么递推,加入一个仓库后的影响怎么算出来思路:http://www.cnblogs.com/jackge/archive/2013/03/27/2984463.html#include #include #include #include using nam原创 2016-10-04 17:10:23 · 291 阅读 · 0 评论 -
HDU 3008 Warcraft DP .
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=3008一开始 d[i][j] 定义为 前i回合数,k魔法值 最多能打多少血,但是这个很难判断最短时间所以定义为 前i回合数,k魔法值 Boss剩下的生命值状态转移:Dp[i+1][j-sk[k].mp+x]=min(Dp[i+1][j-sk[k].mp+x],Dp[i][j]+sk[k]原创 2016-10-04 14:21:38 · 682 阅读 · 0 评论 -
HDU 1502 Regular Words 打表+大数相加 .
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1502#include #include #include #include using namespace std;const int maxn=60+5;typedef long long LL;struct BigInteger{ static const int BASE=1原创 2016-10-04 12:30:00 · 238 阅读 · 0 评论 -
HDU 1501 Zipper DP -
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1501思路来自:http://blog.csdn.net/vsooda/article/details/7936229?locationNum=3DP解法:最优子结构分析:如上例,如果A、B可以组成C,那么,C最后一个字母e,必定是 A 或 C 的最后一个字母组成。C去除除最后一位,就变原创 2016-10-04 00:11:38 · 235 阅读 · 0 评论 -
HDU 1503 Advanced Fruits LCS -
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1503求出LCS,然后根据d[][]找出路径,注意要从后往前找,而不能从前往后找#include #include #include #include using namespace std;const int maxn=100+5;char str1[maxn],str2[maxn原创 2016-10-04 10:30:44 · 265 阅读 · 0 评论 -
HDU 1300 Pearls DP .
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1300就是要明白 一些东西的的数量的累加肯定是连续的 比如 不可能a2累加到a4,跳过a3,而应该是a2,a3 都累加到a4#include #include #include #include using namespace std;const int maxn=200+5;con原创 2016-10-03 10:02:05 · 309 阅读 · 0 评论 -
HDU 1422 重温世界杯 DP+最长正子段长度 *
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1422主要是处理正子段长度有点麻烦直接将在保存的数据后面再接上1…n的数据,这样扫描一遍的复杂度为n;再加一个优化, 当Dp[i]==n时,也就是能全部游完所有城市的时候,直接break;#include #include #include #include using namesp原创 2016-10-02 23:37:19 · 306 阅读 · 0 评论 -
HDU 1224 Free DIY Tour DP -
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1224注意有些路是走不到的写了好长时间,真烦#include #include #include #include #include using namespace std;const int maxn=100+5;const int INF=0x3f3f3f3f;int d原创 2016-10-02 21:26:26 · 221 阅读 · 0 评论 -
HDU 1080 Human Gene Functions DP -
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1080#include #include #include #include using namespace std;const int maxn=100+5;const int INF=0x3f3f3f3f;#define max3(a,b,c) max(a,max(b,c))ch原创 2016-10-02 18:59:04 · 258 阅读 · 0 评论 -
HDU 2059 龟兔赛跑 DP -
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2059根据充电站将整个赛道分为一段一段,只要每一段时间最短总的也就最短麻烦的是,经过一个充电站选择不冲,但电瓶车里其实还会剩下一些电,所以还要知道经过每个充电站的剩余电量将问题转化一下,当不冲电的时候,就等于没有加油站所以if(val[i] - val[j]dp[i] = m原创 2016-10-02 15:18:46 · 480 阅读 · 0 评论 -
HDU 1081 To The Max 最大子矩阵和 .
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1081#include #include #include #include using namespace std;const int maxn=100+5;const int INF=0x3f3f3f3f;int Grid[maxn][maxn],d[maxn];int MaxS原创 2016-10-02 13:34:08 · 284 阅读 · 0 评论 -
最大连续子段和+最大矩阵和
转自:http://blog.csdn.net/tianshuai1111/article/details/7489759一,题目:最大子段和: 给定一个长度为n的一维数组a,请找出此数组的一个子数组,使得此子数组的和sum=a[i]+a[i+1]+……+a[j]最大,其中i>=0,i=i,j 例如:31 -41 59 2原创 2016-10-02 08:50:08 · 344 阅读 · 0 评论 -
HDU 1078 FatMouse and Cheese .
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1078#include #include #include #include using namespace std;const int maxn=100+5;int N,k;int G[maxn][maxn],d[maxn][maxn];const int dx[]={1,-1,0原创 2016-10-01 23:51:21 · 208 阅读 · 0 评论 -
HDU 1025 Constructing Roads In JGShining's Kingdom LIS -
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1025要用nlogn的算法,不然会超时参见博客讲解:http://blog.csdn.net/kaitangshouljz/article/details/41074187?locationNum=7#include #include #include #include using原创 2016-09-30 17:57:21 · 238 阅读 · 0 评论 -
HDU 1160 FatMouse's Speed .
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1160先对体重升序排序,然后求s的最长下降子序列#include #include #include #include #include using namespace std;const int maxn=10000+5;struct Mice{ int w,s,idx;原创 2016-09-30 09:05:57 · 226 阅读 · 0 评论 -
HDU 1158 Employment Planning DP .
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1158#include #include #include #include using namespace std;const int maxn=12+5;const int maxp=100+5;const int INF=0x3f3f3f3f;int NumWorker[max原创 2016-10-04 19:42:11 · 292 阅读 · 0 评论 -
HDU 1074 Doing Homework 状态压缩+DP .
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1074#include #include #include #include using namespace std;const int INF=0x3f3f3f3f;struct HomeWork{ char name[100+5]; int deadline,costday;原创 2016-10-04 21:47:54 · 250 阅读 · 0 评论 -
UVA 10891 Game of Sum 博弈DP -
题目地址:http://vjudge.net/problem/UVA-10891题目是博弈,双方都是采用最优的解法,所以要枚举所有可能的取法状态:d[i][j]代表i~j,先手A取得的最大得分状态转移:A取i~k ,ki 复杂度为O(n*n) ,选择分数高的作为决策即A若取i~k, 那么还剩下k+1~j 记忆化递归法:#include using namespace原创 2016-10-19 16:30:03 · 208 阅读 · 0 评论 -
HDU 1506 Largest Rectangle in a Histogram -
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1506#include #include #include #include #include #include #include #include using namespace std;#define REP(i,a,b) for(int i=a;i<=(int)b;i++)原创 2017-02-21 15:18:57 · 235 阅读 · 0 评论 -
POJ 1205 Water Treatment Plants JAVA高精度+DP *
题目地址:http://poj.org/problem?id=12051.把自己的污水排到河里V2.把自己的污水送到右边>3.把自己的污水送到左边至少要有一个城市排水。要求给N个城市,方案种数。用递推的方法,从1个到n个定义A(n)为n个城市的总数,也就是这n个城市可以解决排水问题那么就尝试从n个城市推到n-1假设:原创 2017-01-01 19:13:31 · 395 阅读 · 0 评论 -
UVA 1626 Brackets sequence
状态表示:d(i,j) 表示 i~j至少要添加几个括号状态转移:1)(S) 或 {S} 转移成 S ,即d(i,j) --> d(i+1,j-1) 如果 s[i]==s[j] 2) A=S1+S2 转移成 S1和S2 ,即 d(i,j0 --> d(i,k)+d(k+1,j) 但每种都要转移到第二种方法试一试 ,如[][]只是第一种会导原创 2016-07-14 18:51:17 · 244 阅读 · 0 评论 -
UVA 10817 Headmaster's Headache DP *
题目地址:Headmaster’s Headache 刘汝佳的算法如下#include <bits/stdc++.h>using namespace std;#define REP(i,a,b) for(int i=a;i<=(int)(b);++i)#define REPD(i,a,b) for(int i=a;i>=(int)(b);--i)const int INF=0x3f3f3原创 2016-11-19 14:47:10 · 325 阅读 · 0 评论 -
UVA 10564 Paths through the Hourglass .
题目地址:Paths through the Hourglass这题目好烦好烦好烦!! 因为要算种类数,所以,d[i][j][k]表示从下往上走到(i,j)格子含k数字 有几种方法#include <bits/stdc++.h>using namespace std;#define REP(i,a,b) for(int i=a;i<=(int)(b);++i)#define REPD(i,原创 2016-11-19 14:05:31 · 264 阅读 · 0 评论 -
LA 3530 Martian Mining DP .
题目地址:Martian Mining题目的意思就是,每个格子可以放 朝上的管子或者朝左的管子,问最多能得到多少矿d[i][j][k]表示到i,j格子且此格子是k放置的, 最多能得到多少矿后来写出来后发现不行,状态转移不行,你知道 此格子怎么放,周围的格子怎么放,但是要判断矿能不能送到目的地还需要,将沿途的所有k==1的格子加上所以换个状态定义,d[i][j][k]表示i,j这一个格子,若k==1,原创 2016-11-19 10:14:16 · 364 阅读 · 0 评论 -
LA 4727 Jump DP *
题目地址: LA 4727 Jump 转自博客:shiqi_614 约瑟夫环的问题。 题目给你n,k。n即约瑟夫环的长度,k是淘汰掉从当前开始数的第k个人,然后问你被淘汰的最后三个人是谁。 逆向思维。如果某个人A是最后被淘汰掉的,当最后只剩下一个 人(即A)时,A一定是在0位置(我们从0位置开始,方便取余运算)。那么当只剩下两个人时,A的位置又是在哪呢?原创 2016-11-18 21:57:25 · 307 阅读 · 0 评论 -
UVA 11795 Mega Man's Mission -
题目地址:http://vjudge.net/problem/UVA-11795如果 原来的枪不会掉的话,那么首先先杀谁都没什么关系了d[i][j] 表示杀了i人原创 2016-11-18 21:09:32 · 371 阅读 · 0 评论 -
LA 4731 Cellular Network -
题目地址:http://vjudge.net/problem/UVALive-4731如何 分组 问题 以往遇到的这种题目,需要分组的,都是二进制枚举子集,暴力求解的,但这里数据量达100,所以根本不可能这个应该是DP,DP的状态压缩也不可能,都不知道怎么表示状态,那么只有贪心了 ,贪心也没有思路..看题解:先从大到小排序,那么就是连续的数字中分组了,那么就可以DP原创 2016-11-18 12:06:26 · 383 阅读 · 0 评论 -
UVA 11404 Palindromic Subsequence -
题目地址:http://vjudge.net/problem/UVA-11404一开始以为是逆序后再求 LICS , 完全不知道怎么做然而 只是个 逆序后求 最长且字典序最小的 公共子序列#include using namespace std;#define REP(i,a,b) for(int i=a;i<=(int)(b);++i)#define REPD(i原创 2016-11-18 08:58:23 · 208 阅读 · 0 评论 -
UVA 11552 Fewest Flops .
题目地址:http://vjudge.net/problem/UVA-11552hhh,自己写出来了1.状态如何表示:要达到两种目的:1)能记录该祖中有几块,2)每组中的字母有几个我选择用 s[i][j] 表示 i组中,j+'a'+1字母有几个,特别的,用s[i][0]记录i组中有几块2.状态方程怎么定义,怎么转移肯定有一维i表示在第几组,因为每次选字母时和原创 2016-11-17 21:32:05 · 240 阅读 · 0 评论 -
LA 4256 Salesmen .
题目地址:http://vjudge.net/problem/UVALive-4256明显用的是动态规划最先想到的是 d[i] 表示 1~i个最少需要修改几次然而 ,这个 状态无法表示修改了什么数,修改成什么,所以肯定不行当状态无法表示的时候,有两种方法:1,DFS状态转移十分方便,就是要很好的剪枝2,给状态增加一维,比如d[i][j]表示i位置数字式j原创 2016-11-17 09:56:54 · 262 阅读 · 0 评论 -
UVA 11584 Partitioning by Palindromes .
题目地址:http://vjudge.net/problem/UVA-11584d[i]表示字符0~i划分成最小回文串的个数#include using namespace std;#define REP(i,a,b) for(int i=a;i<=(int)(b);++i)#define REPD(i,a,b) for(int i=a;i>=(int)(b);--i)const原创 2016-11-16 19:55:00 · 213 阅读 · 0 评论 -
LA 3983 Robotruck DP+滑动窗口 *
题目地址:http://vjudge.net/problem/UVALive-3983d[i]表示从原点出发,经过前i个点,且回垃圾桶倒垃圾的最短路径#include using namespace std;#define REP(i,a,b) for(int i=a;i<=(b);++i)#define REPD(i,a,b) for(int i=a;i>=(b);--i)#de原创 2016-10-20 09:36:31 · 285 阅读 · 0 评论 -
UVA 11825 Hackers' Crackdown DP+状态压缩 -
题目地址:http://vjudge.net/problem/UVA-11825题目难在怎么转化因为题目求的是完全瘫痪,也就是所有的计算机都没有运行将一个计算机及其相邻的计算机表示成集合A,如第一行的 2 1 2,表示为111为了使所有的计算机都没有运行,就是求A这种集合任意组合能使 他们交集全为1,如A1=000111,A2=111000,A3=001100,那么000~111总原创 2016-10-19 19:47:10 · 216 阅读 · 0 评论 -
HDU 1024 Max Sum Plus Plus DP *
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=10241. 对于前n个数, 以v[n]为底取m段:当n==m时,Sum[m][n]=Sum[m-1][n-1]+v[n],第n个数独立成段;当n>m时, Sum[m][n]=max{Sum[m-1][k],Sum[m][n-1]}+v[n]; 其中,m-12. 空间的优化:通过状态方原创 2016-09-29 22:03:51 · 221 阅读 · 0 评论 -
HDU 1978 How many ways 记忆化DP .
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1978#include#include#include#includeusing namespace std;const int maxn=100+5;int G[maxn][maxn],R,C,p=10000;int d[maxn][maxn];bool inside(int x,原创 2016-09-28 18:22:33 · 282 阅读 · 0 评论 -
HDU 1058 Humble Numbers -
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1058打表#include#include#include#includeusing namespace std;#define min4(a,b,c,d) min(min(a,b),min(c,d))int a[5842+5];char* s[]={"th","st","nd",原创 2016-09-28 16:27:51 · 240 阅读 · 0 评论 -
UVA 1637 Double Patience(DP+概率)
一共9堆排,每堆牌有0~4 这5种状态,所以一共有5^9=1953125种状态定义:对于状态i,d[i]表示在这种状态下要成功的概率,也即是后序状态成功几率的平均值状态转移:也即是1)拿这两对相同的牌 2)拿下一对相同的牌状态选取:因为是计算总的成功的概率所以不存在最优的解概率计算:利用全概率公式,也即是 一个状态的成功的概率 等于 后续状态下的成功概率平原创 2016-07-07 17:19:25 · 1080 阅读 · 1 评论 -
UVA 1218 Perfect Service
#include#include#include#include#include #include#includeusing namespace std;const int maxn=10000+5;const int INF=1000000000;vector G[maxn],V;int p[maxn],d[maxn][3];//d(u,0) u是服务器 //d(u,原创 2016-07-15 22:13:57 · 234 阅读 · 0 评论 -
UVA 1220 Party at Hali-Bula(树的最大独立集)
树的独立集:即集合中任选两个点互相不相邻,互相不构成父子关系。 且其中最大的集合即为最大独立集状态定义:1)d(u,1) ,f(u,1) 表示选u点情况下,在u的子树中,能得到的最大人数以及方案的唯一性 2)d(u,0) ,f(u,0) 表示不选u点情况下,在u的子树中,能得到的最大人数以及方案的唯一性状态转移:对于1)在选了u的情况下,肯定就不能选u的字原创 2016-07-15 19:36:44 · 274 阅读 · 0 评论 -
UVA 12186 Another Crisis
#include#include#include#include#include #include#includeusing namespace std;const int maxn=100000+5;int T;//d(u) 第u个人至少需要多少工人 vector sons[maxn];int dp(int u){ int k=sons[u].size(); if(原创 2016-07-15 16:22:05 · 255 阅读 · 0 评论