![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
文章平均质量分 64
zhangwei1120112119
这个作者很懒,什么都没留下…
展开
-
BIT1015 Edit Distance
简单dpres[i][j]表示i长度的前a个字符的串与前j个长度的b字符串的编辑距离当stra[i-1]等于strb[j-1]时,状态转移为res[i][j]=res[i-1][j-1]否则,res[i][j]=MIN(res[i-1][j-1]+1,res[i][j-1]+1,res[i-1][j]+1)#include#include#includeusing names原创 2013-01-26 16:28:10 · 402 阅读 · 0 评论 -
poj1179 Polygon
题意:4t -7 t 4 x 2 x 5t代表加号,x代表乘号首先去掉一个加法或者乘法然后每次取两个相邻的数相加或相乘注意-7可以与5相加求解出的最大值解法:很容易想到区间DP这里要注意的是区间的最大值可能由两个子区间的最小值相乘得到所以除了最大值还要保存最小值#include#include#include#includeusin原创 2013-06-29 11:06:33 · 696 阅读 · 0 评论 -
poj1160 Post Office
输入:10 51 2 3 6 7 9 11 22 44 50意为有10个小村,有5个邮局,放置邮局使得所有小村到最近的邮局的距离之和最小小村的坐标为1,2,3,6,7,9,11,22,44,50定义状态:dp[i][j]表示[0,i]这i+1个小村放置j个邮局的最小指状态转移:dp[i][j]=dp[k][j-1]+L[k+1][i]原创 2013-04-19 15:07:11 · 557 阅读 · 0 评论 -
poj2176 Folding
题目意思,看样例就行了Sample InputSample input #1AAAAAAAAAABABABCCDSample input #2NEERCYESYESYESNEERCYESYESYESSample OutputSample output #19(A)3(AB)CCDSample output #22(NEERC3(YES))压缩字符串,dp[i原创 2013-04-25 12:02:38 · 817 阅读 · 0 评论 -
POJ2168 Joke with Turtles
50 20 32 11 24 0意为有5只乌龟第一只乌龟说前面有0只乌龟,后面有2只乌龟第二只乌龟说前面有0只乌龟,后面有3只乌龟这些乌龟中一定有撒谎的,否则会发生冲突对每只乌龟,[ai,bi]表示前面有ai只乌龟,后面有bi只乌龟所以其位置一定为[ai+1,n-bi]这个区间内,对于例子[1,3][1,2][3,4][2,3][5,原创 2013-04-22 19:50:42 · 686 阅读 · 0 评论 -
HDU4504 威威猫系列故事——篮球梦
关于这题。。我调了半天,告诉WA的人一声,把long long 换成__int64吧,包你过。。。状态转移为//d[i][j]表示前i回合获得j分的方法数d[i][j]=d[i-1][j-1]+d[i-1][j-2]+d[i-1][j-3]#include#include#include#include#includeusing namespace std;__原创 2013-03-22 18:00:53 · 1147 阅读 · 0 评论 -
HDU4502 吉哥系列故事——临时工计划
dp[i]表示前i天的最大工资则状态转移为dp[i]=dp[j-1]+a[j][i] ,其中[j,i]为一个工作终于AC了,WA了一天了。。我还是too young啊,没有考虑输入有相同日期的工作#include#include#includeusing namespace std;int dp[110];//dp[i]为前i天的最大工资int abut[110原创 2013-03-21 15:40:01 · 660 阅读 · 0 评论 -
poj1722 SUBTRACT
5 41210435给5个数,每次取两个数减con([12,10,4,3,5],2) = [12,6,3,5]con([12,6,3,5] ,3) = [12,6,-2]con([12,6,-2] ,2) = [12,8]con([12,8] ,1) = [4]最终获得4解法:原问题可视为在数列中添加减号和括号原创 2013-04-04 19:03:19 · 874 阅读 · 0 评论 -
HDU4501 小明系列故事——买年货
背包状态定义d[i][a][b][c] 前i件a价钱b积分c免费的最大值状态转移 d[i][a][b][c] d[i-1][a-a[i-1]][b][c]+val[i-1] d[i][a][b][c] d[i-1][a][b-b[i-1]][c]+val[i-1] d[i][a][b][c] d[i-1][a][b][c-c[i-1原创 2013-03-21 15:34:38 · 877 阅读 · 0 评论 -
poj1157 LITTLE SHOP OF FLOWERS
题意:有n束花插入m个瓶子、按照原来的顺序插入瓶子,瓶子可以为空,但是花要全部放入瓶子输入:3 57 23 -5 -24 165 21 -4 10 23-21 5 -4 -20 20意思是3束花插入5个瓶子第一束花插入第一个瓶子获得的美观度为7,第二个瓶子为23输出:最大美观度解法:定义状态d[i][j]表示前i束花插入前j个瓶子所获得的最大值原创 2013-04-02 11:18:18 · 525 阅读 · 0 评论 -
poj1548 Robots
题意就是给一个矩阵中的一些点从矩阵左上角出发,每次只能往下走和往右走每次经过该点该点的标记就会消失问,至少走几次标记会全部消失偏序集dilworth定理求一次非往下走和往右走的最长子序列#include#include#include#includeusing namespace std;class coordinate{public: int x,y;}原创 2013-03-13 20:56:20 · 988 阅读 · 0 评论 -
poj1742 Coins
三天了,从一点不会单调队列到AC。。。。。dp[i]表示i容量是否能凑出来num[i]表示当前i容量使用当前硬币的数目关于单调队列优化多重背包的思想,在《国家集训队2009论文集浅谈几类背包题》有详细介绍#include#include#includeusing namespace std;int a[110];int c[110];bool dp[100010原创 2013-03-13 18:17:07 · 751 阅读 · 0 评论 -
hdu3530 Subsequence
题意:给出n,m,k和n个数a[0],a[1],,,,a[n-1]对n个数,求其中的一个最长的连续子序列这个字序列的最大值与最小值之差满足大于等于m小于等于k动态规划状态定义dp[i]表示以i结束的满足条件的最长字序列的长度转移方程对dp[i-1]的序列中的最大值MAX和最小值MIN如果此序列中加入a[i]后MAX-MIN若MAX-MIN>k,可通过踢出MAX与原创 2013-03-10 19:48:32 · 842 阅读 · 0 评论 -
BIT1018 没有上司的聚会
d[i][0]表示不选该节点的以该节点为子树的最大欢乐值d[i][1]表示选择该节点的以该节点为子树的最大欢乐值staff表示员工状态转移为d[i][0]=sum(max(d[i-child][0],d[i-child][1]))d[i][1]=sum(d[i-child][0])#include#include#include#includeusing n原创 2013-01-28 11:46:12 · 515 阅读 · 0 评论 -
BIT1008 Putting Apples
将n个苹果放入k个盘子里,问多少种方法,(1,2)和(2,1)是同一种用递推的方法用d[n][k]表示将n个苹果放入k个盘子的方法数如果k个盘子里有一个空的,方法数为d[n][k-1]如果没有空的,方法数为d[n-k][k] 转移方程为 d[n][k]=d[n][k-1]+d[n-k][k]如果盘子数大于苹果数d[n][k]=d[n][n];原创 2013-01-15 17:23:29 · 386 阅读 · 0 评论 -
BIT1012 导弹防御问题
求一次最长降序和最长升序,输出两个答案#include#include#includeusing namespace std;int a[1010];int d[1010];//d[i]表示包含i的0,1,2,,i的最长子序列int main(){ int n; while (~scanf("%d",&n)) { for(int i=0;i<n;i++) {原创 2013-01-16 20:11:32 · 329 阅读 · 0 评论 -
BIT 1010 Maximum Sum
题意:给一列数,求某一个字序列使该字序列的数的和最大,输出该字序列的和解法,输入为a[0] a[1]......a[n-1]保存状态d[0],d[1],,,,,d[n-1]d[i]表示包含了a[i]的以a[i]开始的序列i,i+1,,n-1的最大值状态转移就是当d[i+1]为正数时,d[i]=d[i+1]+a[i]否则d[i]=a[i]#include#inc原创 2013-01-15 21:39:33 · 385 阅读 · 0 评论 -
BIT1021 Pascal's Travels
这题本就是个dp水题,但是我做的那个郁闷。。。用int map[][]居然会TLE,一怒之下换了char map[][],再把getchar什么的换成了cin,就AC了。。。题意:4 2331 1213 1231 3110 对这个样例的意思是给一个二维矩阵2 3 3 11 2 1 31 2 3 13 1 1 0从左上角出发到达右下角的路线有多少条左上原创 2013-01-29 13:36:13 · 378 阅读 · 0 评论 -
HDU1561 The more, The Better
根据题意可以建立一颗树要想攻占子节点,必须先攻占父亲节点,以这个关系建立森林在从0号节点引一个关系到所有树根,森林就成为一棵树了状态定义opt[i][j]表示以i号节点为根的子树中选择j个点获得的最大价值状态转移Gem[i]即输入的bopt[i][j]=opt[son1][j1]+opt[son2][j2]+....+opt[son-m][jm]+Gem[i]令d[原创 2013-07-02 15:48:36 · 590 阅读 · 0 评论