
ACM-动态规划
文章平均质量分 76
yew1eb
https://github.com/yew1eb
展开
-
hdu2546 饭卡
饭卡Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 6996 Accepted Submission(s): 2350Problem Description电子科大本部食堂的饭卡有一种很诡异的设计,即在原创 2013-07-29 11:16:23 · 1772 阅读 · 0 评论 -
概率DP入门大集合
转自:http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710606.html概率DP主要用于求解期望、概率等题目。转移方程有时候比较灵活。一般求概率是正推,求期望是逆推。通过题目可以体会到这点。 首先先推荐几篇参考的论文:《信息学竞赛中概率问题求解初探》《浅析竞赛中一类数学期望问题的原创 2013-09-21 10:51:16 · 2762 阅读 · 0 评论 -
hdu1712 ACboy needs your help
跟资源分配类型动态规划里的机器分配相似。背包九讲里的分组背包模型, 三重循环OK。第一重枚举第几组,第二重枚举背包容量,要倒着来,第三重枚举该组里面的物品。#include #include #define max(a,b) a>b ? a:bint a[110][110];int f[110];int main(){ int n,m, i, k, j;原创 2013-08-24 15:30:39 · 1640 阅读 · 0 评论 -
poj3211 Washing Clothes(多次01背包)
多次01背包每种颜色的衣服的分到一组,费用是洗一件衣服的时间,每组求解出最少时间,再逐组累加起来。#include #include using namespace std;const int maxn = 102;const int maxm = 12;struct tt { char clr[11]; int cnt; int sum原创 2013-08-24 15:09:54 · 1696 阅读 · 0 评论 -
Hdu 1059 Dividing & Zoj 1149 & poj 1014 Dividing(多重背包)
多重背包模板~#include #include int a[7];int f[100005];int v, k;void ZeroOnePack(int cost, int weight){ for (int i = v; i >= cost; i--) if (f[i - cost] + weight > f[i]) f[i]原创 2013-08-24 14:55:01 · 1994 阅读 · 0 评论 -
hdu2955 Robberies
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2955分析:正确的方程是:f[j]=max(f[j] , f[j-a[i]]*(1-b[i]) ) 其中,f[j]表示抢j块大洋的最大的逃脱概率 始化为:f[0]=1.0,其余初始化为0.0 #include #include #define MAXN 105int m原创 2013-07-29 10:40:54 · 1559 阅读 · 0 评论 -
UVA 562 Dividing coins
Dividing coins It's commonly known that the Dutch have invented copper-wire. Two Dutch men were fighting over a nickel, which was made of copper. They were both so eager to get it and the原创 2013-07-29 10:26:20 · 2023 阅读 · 0 评论 -
POJ3624 Charm Bracelet
http://poj.org/problem?id=3624 裸01背包 code:#include #define M 13000#define N 4000int n, t;int f[M];int w[N], v[N];int main() { int i, j, max; scanf("%d%d",&n,&t); f原创 2013-07-28 20:04:21 · 1720 阅读 · 0 评论 -
DP_各种背包专辑
《背包问题九讲》最新版:http://pan.baidu.com/share/link?shareid=1551089879&uk=638124334 感觉最近越来越水啦!好吧,彩笔水背包去。 一、01背包问题(2013.07.18~)poj 3624 Charm Braceletpoj 3628 Bookshelf 2poj 3211 Washing Clot原创 2013-07-18 19:58:06 · 2623 阅读 · 0 评论 -
数位dp
点击打开链接原创 2014-03-07 13:53:24 · 2064 阅读 · 0 评论 -
【DP_树形DP专辑】
树,一种十分优美的数据结构,因为它本身就具有的递归性,所以它和子树见能相互传递很多系想你,还因为它作为被限制的图在上面可进行的操作更多,所以各种用于不同地方的树都出现了,二叉树、三叉树、静态搜索树、AVL树,伸展树、线段树、SPLAY树,后缀树等等.. 枚举那么多种数据结构只是想说的树方面的内容相当多,本专辑只针对在树上的动态规划,即树形DP.做树形DP一般步骤是先将树转换为有根树原创 2013-11-08 01:54:59 · 1676 阅读 · 0 评论 -
poj 2342 Anniversary party,树形DP easy
poj 2342 Anniversary party没有上司的晚会Ural大学有N个职员,编号为1~N。他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司。每个职员有一个快乐指数。现在有个周年庆宴会,要求与会职员的快乐指数最大。但是,没有职员愿和直接上司一起与会。程序名:party输入格式:第一行一个整数N。(1接下来N行,第i+1行表原创 2014-08-04 16:24:10 · 1602 阅读 · 0 评论 -
树型动态规划小练
Ural 1018POJ 1463POJ 1947POJ 2057POJ 2486POJ 3140POJ 3342POJ 3345原创 2013-08-24 09:10:50 · 2077 阅读 · 0 评论 -
POJ 2955 Brackets(区间DP, 记忆化搜索)
题意:给你一个括号序列(只包括(,),[,],{,} ) , 问你最长的合法子序列多长?合法情况如下:()[]{} (()[]) (a)[b] “a,b都是合法序列”设DP[i][j]表示区间[i,j]有多少个匹配的括号,则所求结果为DP[0,n-1]*2。转移方程:DP[i][j] = max{DP[i+1,j原创 2014-04-03 17:30:55 · 1780 阅读 · 0 评论 -
hdu2602 Bone Collector
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2602裸01背包~~~#include #include #define N 1000int f[N+1];int volume[N], value[N];int n, v;int main() { int T, i, j,max; scanf("%d",&T);原创 2013-07-29 10:34:31 · 1499 阅读 · 0 评论 -
poj1745 Divisibility
DivisibilityTime Limit: 1000MS Memory Limit: 10000KTotal Submissions: 9483 Accepted: 3302DescriptionConsider an arbitrary sequence of integers. One can place +原创 2013-07-28 22:19:58 · 1607 阅读 · 0 评论 -
poj1384 Piggy-Bank(完全背包)
http://poj.org/problem?id=1384恰好装满的最小价值~#include #include const int INF = 1000000000;int f[10010];int main(){ int E, F, W, T, n, p, w,i , j; scanf("%d\n",&T); while(T--) {原创 2013-08-24 14:43:47 · 1778 阅读 · 0 评论 -
poj2063 Investment(多次完全背包)
http://poj.org/problem?id=2063多次完全背包~#include #include #define MAXN 50000#define max(a,b) ((a)>(b)?(a):(b))int dp[MAXN];int v[11], c[11];int main(){ int t, m, year, d, i, j, k, sum;原创 2013-08-24 14:37:56 · 1800 阅读 · 0 评论 -
poj2392 Space Elevator(多重背包)
http://poj.org/problem?id=2392题意:有一群牛要上太空。他们计划建一个太空梯-----用一些石头垒。他们有K种不同类型的石头,每一种石头的高度为h_i,数量为c_i,并且由于会受到太空辐射,每一种石头不能超过这种石头的最大建造高度a_i。帮助这群牛建造一个最高的太空梯。吐槽:做练习的时候,连需不需要对数据排序都没分析清楚。。。下次再也不把练习安排原创 2013-08-20 00:43:30 · 2157 阅读 · 0 评论 -
POJ1276 Cash Machine(多重背包问题)
三种解法:多重背包转化为完全背包和01背包;多重背包通过二进制化化为01背包;通过计数法优化为2重循环。code1: 47MS #include #include #define Max(a,b) (a) >(b)?(a):(b)int dp[100005], Cost[11], Count[11], cash;void ZeroOnePack(i原创 2013-09-20 17:10:41 · 2161 阅读 · 0 评论 -
poj1976 A Mini Locomotive
A Mini LocomotiveTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 2115 Accepted: 1173DescriptionA train has a locomotive that pulls the train with its原创 2013-07-29 10:22:06 · 2234 阅读 · 0 评论 -
POJ3211 Washing Clothes
http://poj.org/problem?id=3211 按颜色分类,然后每种颜色的进行01背包即可。 无聊的题~~~~~~code:#include #include using namespace std;const int maxn = 102;const int maxm = 12;struct tt { char clr[11];原创 2013-07-28 20:58:51 · 1760 阅读 · 0 评论 -
POJ3628 Bookshelf 2
http://poj.org/problem?id=3628 题意: 有N条牛,每条牛的的高度为Hi,有一个书架高度为B,求一些牛叠起来的高度与B的最小高度差。 有点变化的01背包~~~code:#include #include #define N 20000005int a[25];int f[N];int main() {原创 2013-07-28 20:12:38 · 1676 阅读 · 0 评论 -
HDU-1203 I NEED A OFFER!(0、1背包)
I NEED A OFFER!Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5280 Accepted Submission(s): 1799Problem DescriptionSpeakless很早就原创 2013-05-23 22:43:19 · 1655 阅读 · 0 评论 -
poj3311 Hie with the Pie,状态压缩
题目链接:http://poj.org/problem?id=3311Floyd + 状态压缩DP题意是有N个城市(1~N)和一个PIZZA店(0),要求一条回路,从0出发,又回到0,而且距离最小。状态:dp[S][v]表示从v出发访问剩余的所有顶点(集合S),最终回到顶点0的路径的权重总和最小值。#include #include #inc原创 2014-09-11 15:13:12 · 1759 阅读 · 0 评论 -
hdu4906 Our happy ending,状态压缩DP
题意:给一个n个数的数列,从中取一些数构成新数列,如果新数列中有一些数的和是k,那么这就是一个好数列,问这样的数列的个数。n,k状态:dp[][state] 中state的二进制每一位表示和为(1~k),1表示可以取到,0表示取不到。状态转移方程:dp[i][state] = sum(dp[i-1][state']); state = 1原创 2014-08-03 16:03:46 · 2224 阅读 · 0 评论 -
poj 3254 Corn Fields ,状态压缩DP
题目链接题意:一个矩阵里有很多格子,每个格子有两种状态,可以放牧和不可以放牧,可以放牧用1表示,否则用0表示,在这块牧场放牛,要求两个相邻的方格不能同时放牛,即牛与牛不能相邻。问有多少种放牛方案(一头牛都不放也是一种方案)state[i] 表示对于一行,保证不相邻的方案状态:dp[i][ state[j] ] 在状态为state[j]时,到第i行符合条原创 2014-08-03 03:22:19 · 1985 阅读 · 0 评论 -
zoj2972 Hurdles of 110m
当时练习的时候,没有想清楚。 (#-.-)这题挺水的,把状态转移方程推出来就知道写了。Code:#include #include #define min(a,b) a<b ? a:bconst int maxn = 115;const int INF = 1000000000;int f[maxn][maxn];//f[i][j]表示第i个阶段耗费j点力量原创 2013-08-19 10:14:49 · 1724 阅读 · 0 评论 -
hdu1069 Monkey and Banana
题意:把给定尺寸的长方体 ( 数量不限 ) 叠在一起 , 能叠加的条件是 ,上面一个长方体的长宽比下面一个长方体的长宽短都短 , 或者一边相等 , 另一边较短 , 长方体可以任意面朝下摆放 , 求这些长方体能够叠成的最高的高度 .分析:简单DP先数据有序化一下。然后,设f[i] = max{ f[j] + rec[i].h} (jblocks[i]能放在bl原创 2013-07-27 20:05:25 · 1852 阅读 · 0 评论 -
hdu2059 龟兔赛跑
http://acm.hdu.edu.cn/showproblem.php?pid=2059简单DP我们以供电站划分阶段。设f[i]表示到达第i个供电站的最小耗时。则f[i] = min{ f[j] +cost[j->i] } jcost[j->i]: if dist[j->i] > C then原创 2013-07-27 19:48:52 · 1642 阅读 · 0 评论 -
poj1058 Humble Numbers
Humble NumbersTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 13129 Accepted Submission(s): 5705Problem DescriptionA number w原创 2013-07-27 19:39:00 · 1687 阅读 · 0 评论 -
poj2192 | HDU1501 - Zipper(最长公共子序列)
ZipperTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 14117 Accepted: 4958DescriptionGiven three strings, you are to determine whether the third string原创 2013-05-25 14:39:40 · 1796 阅读 · 0 评论 -
hdu1466 计算直线的交点数
题意:平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。分析:DP设状态:f[i][j]表示i条直线能否产生j个交点。有不同的交点数--->n条直线中有平行线。;n个点最多有n(n+1)/2个交点。i条直线中j(j则此种交法的交点数就为(i-j)*j+k((i-j)原创 2013-07-26 14:26:56 · 1736 阅读 · 0 评论 -
UVa10651(记忆化搜索)
题意:给一串-和o组成的字符串,你可以把“-oo"变成”o--",可以把“oo-”变成“--o",问最后最少有多少个o.状态压缩 ,记忆化搜索code:#include #include #define len 12#define min(a,b) (((a)<(b)) ?(a):(b))int d[1<<13];int dp(int n){原创 2013-07-26 11:00:06 · 1557 阅读 · 0 评论 -
hdu1024 Max Sum Plus Plus
Max Sum Plus PlusTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 13233 Accepted Submission(s): 4361Problem DescriptionNow I t原创 2013-07-30 16:47:34 · 1945 阅读 · 0 评论 -
hdu 2660 Accepted Necklace (二维01背包)
Accepted NecklaceTime Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other)Total Submission(s) : 25 Accepted Submission(s) : 5Font: Times New Roman | Verdana | Geor原创 2013-07-19 08:52:34 · 2196 阅读 · 0 评论 -
最长公共子序列
http://poj.org/problem?id=1458 模版题 code1:http://codepaste.net/pffta9 code2(滚动数组):http://codepaste.net/6qq8b2原创 2013-05-18 09:52:03 · 1673 阅读 · 0 评论 -
poj1948 Triangular Pastures
大意:给你n根木棒,要你拼接成面积最大的三角形。由于数据规模很小。所以我们可以将问题转化为 可行性问题的判定。(DP)设f[i][j]表示能否拼接成三边为i , j, sum-i-j的三角形。计算出f[i][j],然后两重循环枚举i和j,记录下最大面积值。原创 2013-08-20 13:01:02 · 1645 阅读 · 0 评论 -
zoj2059 The Twin Towers(经典的DP)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1059经典的DP,不会做啊 (╬ ̄皿 ̄)凸 。。。。。。。。。。。设dp[j]表示高度差为j时,矮塔的高度。对于每个块x,只有两种放法,1)放到高塔上 2)放到矮塔上 采用滚动数组,维护两个一维数组就可以了。原创 2013-08-20 10:51:43 · 1715 阅读 · 0 评论 -
POJ 1159 Palindrome
最少需要补充的字母数 = 原序列S的长度 — S和S'的最长公共子串长度#include #include #define Max(a,b) (a)>(b)?(a):(b)const int maxn = 5000 + 10;char s1[maxn], s2[maxn];short dp[2][maxn];int n;int main(){ int i,原创 2013-09-21 10:27:37 · 1742 阅读 · 0 评论