
DP
BEconfidence
坚持才是胜利之道
展开
-
HDU5092 Seam Carving(2014上海全国邀请赛——题目重现)(DP)
题意:给你一个n*m的矩阵,每一行取出一个数,使得这些数和最小,且相邻两行的数所在的列的差的绝对值不能超过1。如果不止一种取法,输出列序号最大的。分析:数塔DP= =。。多了一个数组来记录每一个节点的后继。。。因为要从上往下输出,所以我们从下往上递推,这样可以避免递归输出路径。。。注意要优先选取靠右的列。。。#include#include#include#include#原创 2015-05-03 20:01:42 · 870 阅读 · 0 评论 -
[DP记忆化 字符串] UVa1630 Folding
DP[i][j]。i,j分别表示起始位置,终止位置,数组存该段压缩后的长度。一个串的最短压缩可以有两种情况:1.其本身是重复的,压缩其本身达到最短。2.将其分为两段,两段压缩后连接达到最短。#includeusing namespace std;const int INF= 0x3f3f3f3f;string str;int DP[110][110];string fold[110]原创 2015-09-24 01:52:28 · 1785 阅读 · 1 评论 -
[逆向DP]UVa10118 - Free Candies
篮子里的状态就是取出的糖果堆得状态所以用4维数组表示糖果堆得状态就行了每次两种选择:选一个糖果和篮子中的消除,或者选一个糖果放到篮子中。判断是否相同还用到了位运算符把每个颜色换成二进制数代表 就是一个某位上的二进制1然后判颜色的时候就好判了如果&为1,就说明篮子里已经有了删掉的时候直接减就可以#includeusing namespace st原创 2015-09-24 01:11:42 · 1494 阅读 · 0 评论 -
[记忆化搜索DP]UVa10285 - Longest Run on a Snowboard
#includeusing namespace std;int n,R,C,Max,a[105][105],f[105][105];char name[100];int dp(int i,int j){ if(f[i][j]!=0) return f[i][j]; if(i=1&&j=1) { int k,p,q; if(a[i][j原创 2015-09-24 00:53:34 · 415 阅读 · 0 评论 -
[DP枚举]UVa 1629 - Cake slicing
左右切 上下切枚举处每一种切法 在求最小的用到了记忆化DP#includeusing namespace std;const int INF = 0x3f3f3f3f;int n,m,dp[25][25][25][25];bool has[25][25];int sum(int u,int d,int l,int r){ int ret=0; for(int原创 2015-09-24 01:29:56 · 623 阅读 · 0 评论 -
UVa1025
DP第一题d(i,j)表示时刻i在车站j,最少还需要等多长时间,边界条件式是d(T,j)=0,其他为正无穷,有3中决策1:等待1分钟2:搭乘往右开的车3:塔乘往左开的车#includeusing namespace std;int dp[220][55];int visit[220][55][2];int t[220],d1[55],d2[55];const in原创 2015-10-11 10:07:18 · 1170 阅读 · 0 评论 -
UVa116
Background背景Problems that require minimum paths through some domain appear in many different areas of computer science. For example, one of the constraints in VLSI routing problems is minimizing w原创 2015-10-11 15:34:13 · 403 阅读 · 0 评论 -
UVa437
用二元组(idx,k)表示状态idx为顶面立方体序号,k是高的序号。状态(3,1)就是这个立方体在顶面,且高是b#includeusing namespace std;struct node{ int x,y,z; void f(int a,int b,int c){ x=a,y=b,z=c; }}st[200];bool cmp(node a,node b){原创 2015-10-11 10:10:23 · 379 阅读 · 0 评论 -
{DP!}ZOJ 2604
这个题的题意给出了很多限制给出的n是开壶的个数并且都是成对出现的dp[i][j]i为n,j为小于等于kdp[i][1]遍都是一种,都是()()()()()()()()()这种形式其次会出现(((())))()()()() ()()()(()()()))()()这种形式总有一个最大深度的把第一个看成特殊的!!!把每一个分成了两种情况(X)Y推dp[i][j]原创 2015-08-29 11:56:54 · 1082 阅读 · 0 评论 -
记忆化dp hdu1978
就是那一个数组保存已经到过的点每一个数组存储的都是这个点到nm的路线数#includeusing namespace std;int n,m;int dp[100][100];int a[100][100];int p=0;int dfs(int x,int y){p++; if(dp[x][y]>0) return dp[x][y]; dp[x][y]原创 2015-08-08 21:19:51 · 612 阅读 · 0 评论 -
dp求顺序hdu1160
题意是只求一次的顺序,先按照速度从大到小排序,速度想等到按体重增序排列。然后基本就变成了求已定顺序序列的最长递增序列递增,跟那个求一致最大序列和的基本一致。dp【i】里存储的是到当前i最大的递增序列个数最大的数。dp[i+1]就是在a【i+1】大于前面的a【j】的情况下,dp【i+1】=dp【j】+1;输出的就是从最大的dp【】值从后往前输出,所以用了个栈改成从前往后。以为题意原创 2015-07-06 15:15:21 · 772 阅读 · 0 评论 -
FOJ 1402(dp推规律)
推规律吧/**1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 212 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 223 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 430 1 25 13 29 61 125原创 2015-07-04 10:06:58 · 1123 阅读 · 0 评论 -
hdu2851 (dp)
/**it has N horizontal roads, the ladders always stay at right side vertically, 开始有n条水平的马路,梯子总垂直的放在右边and the ladders are extending towards up and down with unlimited length. If ladder near or cr原创 2015-07-06 16:17:10 · 450 阅读 · 0 评论 -
单行dp复习hdu1087
我写的想法是每一个dp【i】都是前dp【i】的最大值dp【i】就等于前所有dp【0。。。i-1】的最大值加上dp【i】最大值是一个中间变量最大值得选取条件就是序列的值大小都是递增的,也就是a[i]>a[前面的]#include#include#includeusing namespace std;typedef long long LL;LL a[1000+100];L原创 2015-07-05 13:04:06 · 688 阅读 · 0 评论 -
hdu1176(dp)
这个题原来做过,昨晚做没做出来,找不到bug,感觉很难找今天又打了一遍,耐心的输出一些数据,bug很容易就出来了。切记浮躁,做不出就放一放,没必要只为做对而刷题,要感受一点一点的提高。总之就是越慢越好。开=开始是这样if( a[i+1][j]>=a[i+1][j+1]&&a[i+1][j]>=a[i+1][j-1]&&j+1=0) a[i][j]+=a[i+1]原创 2015-07-04 16:57:23 · 742 阅读 · 0 评论 -
最长公共子序列问题(挑战P56)hdu1159
著名问题(LCS,Longest Common Subsequence)原创 2015-07-04 17:06:44 · 530 阅读 · 0 评论 -
[DP]10271 - Chopsticks
dp[i, j]表示前i个筷子选择j对(x, y, z)差值最小。对于第i个筷子,就要考虑清楚了,第i个筷子参与第j对 与 第i个筷子不参与第j对。dp[i][j] = min(dp[i-1][j], dp[i-2][j-1] + w);初始化状态要搞清楚,dp[i, 0] = 0,因为要满足选择k+8组,所以其他的都要赋值INT_MAX;#includeusin原创 2015-09-24 02:19:14 · 374 阅读 · 0 评论