dp
文章平均质量分 68
yan_____
不跟你介绍
展开
-
uva 674 Coin Change
给出一个钱数,求由1,5,10,25,50五种面值的硬币组成该钱数的方法数#includeint dp[7489],coins[5]={1,5,10,25,50};int main(){ int i,j,k,l,m,n; dp[0]=1; for(i=0;i<5;i++) { for(j=1;j<=7489;j++) {原创 2012-10-23 20:56:11 · 749 阅读 · 0 评论 -
hdu 1244 Max Sum Plus Plus Plus
Max Sum Plus Plus PlusTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 854 Accepted Submission(s): 429Problem Description给定一个由原创 2013-02-27 14:47:00 · 938 阅读 · 0 评论 -
poj 2192 字符串匹配
poj 2192判断s1,s2是否能组成s3,可以全部匹配,比较简单,直接判断就行#include#includeint dp[1010][1010];int l1,l2;char s1[1010],s2[1010],s3[2020];int main(){ int i,j,k,n; scanf("%d",&n); for(k=1;k<=n;k++)原创 2013-03-12 11:13:44 · 738 阅读 · 0 评论 -
hdu 2126 Buy the souvenirs
hdu 2126m元,n种纪念品,求能买最多种数的方法数#include#include#define maxn 550#define INF 1<<30int dp[maxn][35],n,m,t,flag;int c[35],w[35];int main(){ int i,j,k; scanf("%d",&t); while(t--) { memset(c,0原创 2013-02-28 16:10:43 · 649 阅读 · 0 评论 -
uva 11081 Strings 字符串匹配
uva 11081#include#include#define s 66char s1[s],s2[s],s3[s];int f1[s][s][s],f2[s][s][s],f[s][s][s];int l1,l2,l3;int main(){ int i,j,k,n; scanf("%d",&n); while(n--) { s原创 2013-03-13 19:25:01 · 887 阅读 · 0 评论 -
zoj 1425 最多匹配交叉 LCS
zoj 1425要注意题目的要求,不然就会想得很复杂1、要求得匹配线是成对交叉的,只是两两相交2、一对交叉线不能是4个相同的数字知道第一点后会发现LCS的方法可以解决这类问题,按照i j循环,每次只看新加的b[j],每个b[j]都与m个a[i]尝试过匹配#include#includeint m,n;int a[120],b[120];int dp[120][120];原创 2013-03-29 12:57:31 · 1087 阅读 · 0 评论 -
zoj 动态规划分类
动态规划 解 #1100 经典,状态压缩 DP,要先枚举出行全部可能的状态,DP[i][j] 表示 i 层,j 末状态,dp[i][st[j][1]]+=dp[i-1][st[j][0]];#1425 交叉线匹配,经典 DP,n^3。#1503 估价游戏,一个决策为背景的 DP,当前剩下 i 次机会和 j 条命,最优的策略可以覆盖 DP[i][j] 范围内的所有情况,那转载 2013-03-21 21:19:47 · 1061 阅读 · 0 评论 -
hdu 3555Bomb找49
首先把所有的数字分成三类,含有49的,不含49的,以9开头但是不含49的先找规律求出前所有可能的位数中三种情况的个数1、含有49,dp[i][0]=dp[i-1][0]*10-dp[i-1][1] 在前i-1位前添上0-9十个数,再减去添4以九开头的i-1位总数2、以9开头但是不含49,dp[i][1]=dp[i-1][0]; 没有49的前i-1位前添原创 2013-03-30 20:39:59 · 795 阅读 · 1 评论 -
uva 11258 String Partition
uva 11258把给的字符串拆成32位有符号整形范围内的整数,(1先把全部可能用到的家数都枚举出来,得到sum[i][j],其中为str[i]到str[j] 构成的数字,再对每个数字加或不加判断最优结果,类似背包,dp[i]为前i位能分出数的最大和dp[i]=max(dp[i],dp[j]+sum[j+1][i])#include#include#define maxn 21原创 2013-03-21 09:36:17 · 751 阅读 · 0 评论 -
uva 1424 简单DP
求把所给路径改成合法路径需要的最小修改次数#include#include#define maxn 1010#define INF 1<<30char str[maxn];int dp[maxn];char vis[maxn][maxn];void init(){ int i; memset(vis,-1,sizeof(vis)); for(i=1;i<原创 2013-04-07 20:22:33 · 757 阅读 · 0 评论 -
uva 11008
uva 11008状态压缩+记忆化搜索#include#include#define max 20#define maxn 2<<18#define INF 1<<30int min(int a,int b){ return a>b?b:a;}int g[max][max],f[maxn],limit,x[max],y[max];int m,n;int dp(i原创 2013-03-25 14:18:53 · 682 阅读 · 0 评论 -
zoj 1100 铺砖 状态压缩
1、st中存的是每一行摆放的所有可能,0是空着,1是占着,st[i][0]中存一行的可能的状态即from,st[i][1]中存与其匹配的下一行状态即to;2、dfs中from是一行中前n个格子的状态,to是与之吻合的状态;3、因为只看每一行的可能状态,所以dfs中的n==w时已取完该种可能,退出递归;4、对于一行的第n列,采取三种摆放长方形的方式dfs(n+2,(fromdfs原创 2013-03-26 00:23:34 · 2079 阅读 · 0 评论 -
uva 11552 无后效性的动态规划
#include#includeint min(int a,int b){ return a<b?a:b;}#define maxn 1010char s[maxn];int n;int dp[maxn][30];int vis[30];int main(){ int i,j,k; int T; scanf("%d",&T); while(原创 2013-04-13 19:50:30 · 1270 阅读 · 0 评论 -
uva 10003 切木棍
uva 10003#include#includeint n,a[55];int dp[51][51];int DP(int i,int j){ if(dp[i][j]!=-1) return dp[i][j]; else { if(i+1==j)//这是一段,切不了,不用切了 { d原创 2013-04-15 13:00:13 · 867 阅读 · 0 评论 -
uva 10827 求和最大可延伸的子矩形
uva 10827 Maximum sum on a torus为了算可延伸的矩形,要在原矩形的右面、下面和右下再补上矩阵,然后枚举全部的子矩形来求最大的和,枚举时先枚举矩形的左上点,再枚举所有的长和宽#include using namespace std;#define MAX 155int main(){ int x,y,i,j,n,s,ans; int c[MAX]原创 2013-04-16 20:21:22 · 698 阅读 · 0 评论 -
uva 10285 记忆化搜索
uva 10285求矩阵中最长递减路径的长度,记忆化搜索,因为要找的路径是严格递减的,所以不会有回头路Sample Input2Feldberg 10 556 14 51 58 8826 94 24 39 4124 16 8 51 5176 72 77 43 1038 50 59 84 815 23 37 71 7796 10 93 53 829原创 2013-05-12 19:43:18 · 1822 阅读 · 0 评论 -
uva 10313 整数拆分——硬币凑价
pay the pricehttp://www.cnblogs.com/staginner/archive/2011/11/30/2269491.html给你一个价格n,求在指定使用的硬币个数范围内付款的方案数,后面可能给你边界a,b,也可能不给,不给的话个数是1-n,给一个a就是1-a,给两个是a-b直接开二维数组背包的话会算重复,比如凑6的话,1、2、3,,2、1、3,3、1、原创 2013-05-12 20:55:55 · 1150 阅读 · 0 评论 -
hdu 1024Max Sum Plus Plus 最大M段字段和 单调优化DP 从一类单调性问题看算法的优化
Max Sum Plus PlusTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11231 Accepted Submission(s): 3691Problem DescriptionNow I t原创 2013-01-19 21:13:09 · 1633 阅读 · 0 评论 -
hdu 3392 Pie
求男生女生中配对的最小差值和,因为将身高排序号再配对一定不会有交叉,所以先将两组人的身高排序,再进行计算hdu 3392 Pie#include#include#include#define maxn 10010#define csize 110#define INF 99999999double nan[maxn],nv[maxn];double dp[2][csi原创 2013-02-27 10:37:42 · 716 阅读 · 0 评论 -
uva 10128 队伍
有n个身高各异的人站成一排,如果某人比他左边所有的人都高,那么它可以往左看到整个队列以外,否则他的视线会被挡住,右边同样。 犯罪就在这里开始了。队列左边有一个人用回旋镖杀死了队列右边的一个人。此时恰有P人向左的视野没有没遮挡,R人向右的时也没有被遮挡,这些人都可能是案件的目击证人。 辩护律师委托你算出这N个人有多少种可能的排列方法满足给定的P和R。原创 2012-10-25 15:59:44 · 916 阅读 · 0 评论 -
uva 10032拔河 poj 2576
拔河要把人分成两拨人数最多只能相差一个,体重总和最相近。这个题在poj和uva上都有,只是uva上有多组输入,poj上只有一种,在poj上过了,但是在uva 上re,不知道怎么回事。#include#includeint dp[45110][115];int w[105];int main(){ int i,j,k,l,m,n,sum,r; scanf("%d",&m); wh原创 2012-11-06 22:47:22 · 1224 阅读 · 0 评论 -
立方体之塔 10051
color[n][0]存当前最底面颜色为n时能摆成最高的塔,color[n][1],color[n][2]存的是此塔底的位置,输出结果时的front、back这些指的是当前木块的上面#include#includeint n;int color[111][3],max[3],tmp[111][3];struct node{ int s,x,qi,qj;}cube[512][6];原创 2012-11-22 20:22:34 · 551 阅读 · 0 评论 -
uva 10029 递变阶梯
求所给字典中最长递变且字典序升序的单词数方法和最长上升子序列是一样的,判断的条件由LIS中的大小关系变成是否可递变#include#include#define size 25010char word[25010][16];int len[25010];int dp[25010];int max(int a,int b){ if(a<b) return b; el原创 2012-11-25 14:33:18 · 930 阅读 · 0 评论 -
uva 10405 Longest Common Subsequence 最长公共子序列 LCS
两个月没看还真忘了,- -b 动态规划的一个计算两个序列的最长公共子序列的方法如下: 以两个序列 X、Y 为例子: 设有二维数组 f[i,j] 表示 X 的 i 位和 Y 的 j 位之前的最长公共子序列的长度,则有: f[1][1] = same(1,1); f[i,j] = max{f[i-1][j -1] + sam原创 2012-10-23 21:46:17 · 720 阅读 · 2 评论 -
hdu 3535 Are You Busy 分组背包,组内至少放一个和组内至多放一个
AreYouBusy有n组工作,T时间,每个工作组中有m个工作,改组分类是s,s是0是组内至少要做一件,是1时最多做一件,2时随意,每项工作的描述是花费的时间和获得的快乐值,求在T时间内可获的最大快乐值。s=0时必选,0组内的物品可以和上一可达状态组合(只放一件),也可以和当前的可达状态组合(放多件),为使0组内的物品一定可以选上及判断状态的合法性,令dp中除dp[0]外均为-原创 2013-01-22 17:20:09 · 1998 阅读 · 3 评论 -
uva 861 Little Bishops 棋盘上的象
回溯会超时,要用把黑白棋盘分别dp,把对角线的格按大小排序后当做放车问题来计算,对角线摞起来不规则,就按照对角行格数从小到大画再dp,就不会有漏掉的情况//回溯#include#includeint zhu[16],fu[16],n,k,tot;int c[9][18];void search(int hang,int j,int lie){ if(hang==n||j>n原创 2012-11-06 22:39:17 · 1766 阅读 · 0 评论 -
hdu 3449 Consumer 依赖背包
依赖背包 事实上,这是一种树形DP,其特点是每个父节点都需要对它的各个儿子的属性进行一次DP以求得自己的相关属性。fj打算去买一些东西,在那之前,他需要一些盒子去装他打算要买的不同的物品。每一个盒子有特定要装的东西(就是说如果他要买这些东西里的一个,他不得不先买一个盒子)。每一种物品都有自己的价值,现在FJ只有W元去购物,他打算用这些钱买价值最高的东西。Consumer原创 2013-01-24 21:03:42 · 1793 阅读 · 1 评论 -
hdu 1011 Starship Troopers 简单树形DP
就是一个普通的依赖背包,一个房间是一个物品,房间中所有bugs是花费,brains是重量,没有留人收集brains一说要注意背包的概念和树形背包是无向边的情况,无相加两条边对结果没有影响Starship TroopersTime Limit : 10000/5000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other原创 2013-01-22 21:05:55 · 550 阅读 · 0 评论 -
hdu 3033 I love sneakers! 必选分组背包
经过几个月的努力,Iserlohn终于获得了一笔数量可观的奖学金。作为一名运动鞋狂热者,他打算把他全部的钱花在运动鞋商店里。 这里有几种Iserlohn想收集的运动鞋品牌,向乔丹和耐克。每一个牌子都有几种产品。由于Iserlohn对运动鞋有绝对的狂热,他希望每种牌子至少买一双。 尽管每双鞋都有确定的标价,Iserlohn仍然按照他自己的喜好给每双鞋定了价值。带着可观但是有限的钱原创 2013-01-25 14:12:56 · 1126 阅读 · 0 评论 -
hdu 2546 饭卡 换了问法的01背包
饭卡里钱数多于5元和小等于5元情况不同,要想最后余额最少,一定是最后买最贵的菜,且卡里钱大等于5越小越好,但饭卡买完最贵的菜外不一定能刚好刷到5元,一定是大等于5,用m-dp[m-5]能凑成最小大于5元的钱数去买最贵的菜,即余额最少的钱数饭卡Time Limit : 5000/1000ms (Java/Other) Memory Limit : 32768/32原创 2013-01-25 15:50:21 · 4569 阅读 · 1 评论 -
合法括号式的最大长度求法(没有优先级时)
简单DP,求最长合法子串以及合法子串的个数,dp[i]代表以i为结尾最长的合法子串,(的dp值都是0,(的长度计入要看是否有),当读入一个)时,如果它左相邻的符号是(,该)的dp值加二,此时还要判断这段()相邻的左面是否也是合法的,比如()()的情况,给它们标号1,2,3,4,此时dp[4]=2,dp[3]=0,dp[2]=2,dp[1]=0,要向前跳过上一段合法串,即dp[i-1],这里是0,因原创 2013-01-26 20:13:36 · 717 阅读 · 0 评论 -
最小子序列和 单向DP
最小子序列和Time Limit: 1000MS Memory limit: 65536K题目描述给你一个长为n(10输入 有多组(小于11组)测试数据,每组第一行输入n和k(用空格隔开),第二行输入n个数(数之间用空格隔开)。输出 请输出最小的和。示例输入15 55 4 3 2 1 1 2 3 4 5 5 4原创 2013-01-19 21:07:52 · 2422 阅读 · 1 评论 -
hdu 1561 The more, The Better 树形DP+背包
The more, The BetterTime Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3511 Accepted Submission(s): 2056Problem DescriptionACboy原创 2013-01-22 11:08:49 · 693 阅读 · 2 评论 -
hdu 2686 Matrix 双线程dp
求从左上角走到右下角再返回左上角的路径最大权值,因为有走回去的过程,当成一次走完的话直接dp会不好写,这里将路径看成从左上角到右下角不相交的两条路径,dp[t][r][p][q]中存第一条路走到(t,r)点和第二条路走到(p,q)点的最大权值,容易得到转移方程dp[t][r][p][q]=max(dfs(t-1,r,p-1,q),dfs(t-1,r,p,q-1),dfs(t,r-1,p-1,q),原创 2013-02-07 00:22:12 · 2022 阅读 · 2 评论 -
二维图中找最大子矩形的四道题
hdu 1506 直方图中找最大矩形找出每个矩形以自己的高能延伸到的左右边界#include#include#define maxn 100010int n;__int64 max;struct node{ int left,right; __int64 num;}t[maxn];int main(){ int i,j,k,l; whil原创 2013-02-27 10:08:48 · 2282 阅读 · 1 评论 -
uva 10118 免费糖果 深搜+记忆化搜索
uva 10118http://www.cnblogs.com/kedebug/archive/2013/04/07/3006493.html#include#include#define N 45#define C 22int max(int a,int b){ return a>b?a:b;}int pile[4][N],f[N][N][N][N],n原创 2013-04-24 09:55:54 · 1750 阅读 · 0 评论