动态规划
文章平均质量分 74
laserss
-
HDU 动态规划(46道题目)倾情奉献~ 【只提供思路与状态转移方程】
Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955背包;第一次做的时候把概率当做背包(放大100000倍化为整数):在此范围内最多能抢多少钱 最脑残的是把总的概率以为是抢N家银行的概率之和… 把状态转移方程写成了f[j]=max{f[j],f[j-q[i].v]+q[i].money}(f[j]表示在概率j之下能抢的大洋);正确转载 2012-07-22 12:39:36 · 1519 阅读 · 0 评论 -
POJ1661Help Jimmy _dp
pooj1661将题目模型想象成水流的下落:遇到木板后分成两股水流继续向下,问什么时候能到达地面(假设地面是最后一个木板)dp[i][0] 水流到达第i个木板左端点的最早时间 dp[i][1] 右端点//poj1661#include#include#include#includeusing namespace std;int dp[1100][2原创 2013-03-21 14:53:56 · 913 阅读 · 0 评论 -
zoj2156Charlie's Change 多重背包可行性问题+记录路径
zoj2156用一个结构体pre数组来记录前一步的信息#include#include#includeusing namespace std;int C,n[30],v[5]={ 0,1,5,10,25};int dp[15000];struct PRE{ int ID,NUM,P;} pre[15000];int main(){ int i,j,k原创 2013-03-26 19:42:58 · 1225 阅读 · 0 评论 -
hdu3033 分组背包变形(至少去1个)
hdu3033受不了了#include#include#includeusing namespace std;int N,M,K,a,b,c;struct NODE{ int num; int w[110],v[110];} n[11];int dp[11][11000];int main(){ int i,j,k; while(scanf("%d原创 2013-04-10 21:10:45 · 804 阅读 · 1 评论 -
hdu3535 01&分组背包
hdu3535稍微能理解一些了,至少取一个的分组背包。http://www.cnblogs.com/wuyiqi/archive/2011/11/19/2255208.html写hdu3033的那题 网上没有解释好一点的题解 ,这题题解比较多#include#include#includeusing namespace std;int N,T,M,原创 2013-04-11 20:48:33 · 1213 阅读 · 0 评论 -
hdu1561树形DP入门
hdu1561The More,The Better推荐题解dp[ i ] [ j ] 以节点i为跟,取j个(包括i,即dp[i][1]=V[i])所能得到的最大值#include#include#include#includeusing namespace std;int N,M,v[223];vectorson[223];int dp[223][223]原创 2013-04-14 13:44:33 · 2983 阅读 · 0 评论 -
hdu1011Starship Troopers 树形DP
hdu1011有很多细节需要理解http://tobyaa.blog.163.com/blog/static/3024859120128260453244/一棵树,有n个结点,每个结点有v个bug,有w的brain。我从1号结点开始走,带着m个战士。 1个战士可以消灭20个bugs,如果我把某个结点的所有bug都消灭了我就能得到那个结点的brain。如果想攻击当前结点,原创 2013-04-15 21:52:51 · 940 阅读 · 1 评论 -
poj1155TELE - 树形dp
poj1155这题和上一题一样的思路,不过背包的体积有不同,每次都要计算#include#include#include#includeusing namespace std;int N,M,v[3010];vectorson[3010]; //记录儿子节点 vectorcost[3010]; //记录花费 int dp[3010][3010];int原创 2013-04-15 11:14:31 · 878 阅读 · 0 评论 -
POJ1947 树形dp 重做
poj1947噩梦。。。#include#include#include#includeusing namespace std;int N,P;vectorson[160];int vis[160],dp[160][160],Start;int dfs(int n){//printf("~%d\n",n); int sum=1,len=son[原创 2013-04-16 20:28:11 · 1111 阅读 · 1 评论 -
hdu1520 Anniversary party 树形dp
hdu1520比之前树形背包要简单多了,没有背包的体积限制dp[ i ] [ 0 ] 以i为根(不包括i本身)的树上取到的最大值dp[ i ] [ 1 ] 以i为根(包括i本身)的树上取到的最大值#include#include#include#includeusing namespace std;int N,V[6100];vectorso原创 2013-04-18 14:32:15 · 922 阅读 · 0 评论 -
poj1741Tree 树的分治 树形dp 男人八题....
poj1741Tree没有思路的话就看看漆子超的论文//重心 距离 排序 统计 //http://www.2cto.com/kf/201208/149839.html#comment_iframe#include#include#include#include#include#includeusing namespace std;#define MAX原创 2013-04-26 20:03:20 · 1635 阅读 · 0 评论 -
hdu2196Computer 经典树形dp 在树上求最长距离
hdu2196题解两次搜索的方法#include#include#include#includeusing namespace std;int N,V[10100]; vectorson[10100]; //图 int MAX[10100],MAXN[10100]; //最大值及其标号 int SMAX[10100],SMAXN[10100];原创 2013-04-18 21:24:39 · 1386 阅读 · 0 评论 -
poj3107 树的重心 非stl实现
poj3107求树的重心,全部输出(poj1655 输出序号最小的节点,数据规模小一点,使用stl)#include#include#include#includeusing namespace std;int N;int v[50010*2],next[50010*2],head[50010],E;int vis[50010];int num[50010],dp[5原创 2013-05-06 20:38:11 · 1685 阅读 · 0 评论 -
poj1655Balancing Act 树的重心,树形dp
poj1655第一次dfs求出每个子树的节点数第二次dfs求答案这一题是poj1741的基础(1741代码)poj3107也是相同的意思 不过所有点都要输出,并且无法使用stl(数据规模较大)题解#include#include#include#includeusing namespace std;int N;vectorson[20010]; //图原创 2013-04-23 12:35:14 · 1205 阅读 · 0 评论 -
zoj3690Choosing number 矩阵dp
zoj3690(Small)S[ i ] 前i个数字排列的方案数 (最后一位小于等于K)(Big) B[ i ] 前i个数字排列的方案数 (最后一个数字大于K)递推公式 :S[ i ] = S[ i-1 ]*(K-1) + B[ i-1 ]*KB[ i ] = S[ i-1 ]*(M-K) + B[ i-1 ]*(M-K)最原创 2013-04-01 19:18:22 · 1085 阅读 · 0 评论 -
hdu1506 & pku2559 Largest Rectangle in a Histogram
hdu1506&pku2559 #includeint H[100005],l[100005],r[100005];main(){ __int64 max,area; int i,n; while(scanf("%d",&n),n) { for(i=1;i<=n;i++) { scanf("%d",&H[i]); l[i]=r[原创 2012-07-22 20:41:02 · 595 阅读 · 0 评论 -
hdu 2059 龟兔赛跑 动态规划
hdu 2059龟兔赛跑终于过了 ~ 不容易啊第一次方法错了,,然后很无奈的上网看了思路 ,我发誓在看见动态规划四个字之后就把网页关掉了 然后自己写。。第一次的代码://hdu2059 龟兔赛跑 //方法错 #includeint P[101]={0};int flag[101];main(){ int i,j,L,N,C,T,Vr,V1,V2; int x原创 2012-07-25 21:52:06 · 3613 阅读 · 2 评论 -
FOJ2013-最大子段和
FOJ2013限定子段长度最短为m,,贴个我的超时代码Time Limit Exceed 哈哈方法和 hdu1003 一样#include#includeusing namespace std;int num[1000001],n,m;int getn(int x){ int i,ret=0; for(i=x;i>x-m;i--) ret+=n原创 2012-08-13 15:46:51 · 861 阅读 · 0 评论 -
hdu1028母函数||dp
hdu1028好像母函数的题目都挺简单的,写了几个都是模板另外还有动态规划的方法#includeusing namespace std;int main(){ int X[121],c1[121],c2[121],N,i,j,num; for(i=1;i<=120;i++) X[i]=120; while(scanf("%d",&N)原创 2012-09-07 21:10:00 · 661 阅读 · 0 评论 -
pku1015Jury Compromise-最小差最大和dp
pku1015Jury Compromisen组数字,每组两个数字 d 和 p,要求从中选出m组,使(m个d的和)与(m个p的和)之差最大,如果有种情况的差值相同,取所有d,p总和最大的那种情况。参考#include#include#includeusing namespace std;int dp[21][801],path[21][80原创 2012-09-17 21:55:04 · 1750 阅读 · 0 评论 -
pkupoj1037A decorative fence-动态规划+字典序计数
pku1037黑书257页例题有木有啊 别人几句话就说完了有木有啊完全看不懂有木有啊没办法只好上网搜题解啊题解也看了半天啊//我无奈了,,努力了很久还是没写出来。不过总算理解了。。。这是努力的结果~#include#includeusing namespace std;__int64 W[21][21],M[21][21],c;原创 2012-09-27 21:24:11 · 1304 阅读 · 0 评论 -
背包
01背包hdu2955 Robberies需要找到背包的容量。有两个选择1.能获得的最大金额 每个银行价值≤100,最多100家银行,所以能获得的最大金额为10000(不考虑风险) int v[10000] ; 2.逃脱的概率。 最终逃脱的概率为在每原创 2012-09-14 12:01:36 · 735 阅读 · 0 评论 -
pku动态规划题集
1015 Jury Compromise最小差最大和1029 False coin 水题1036 Gangsters ! 不会的题。,1037 A decorative fence dp+字典序计数...1038 Bugs Integrated, Inc.1042 Gone Fishing1050 To the Ma原创 2012-09-16 12:43:56 · 1435 阅读 · 0 评论 -
最大连续子串&子矩阵
最大连续子串hdu1003最普通的版本dp[i]=max{ dp[i-1]+dat[i] , dat[i] }对于当前的数字dat[i], 有两种选择A.原子串增长,dp[i]=dp[i-1]+dat[i]~~~~~前提是dat[i]B.原子串结束,以dat[i]为起点开始新子串。~~~~~前提是dat[i]>dp[i-1]+dat[i]注:原创 2012-09-11 19:06:42 · 985 阅读 · 0 评论 -
hdu2854 Beans 二维dp
hdu2845 Beans 二维动态规划,先求每一行的最大和,组成新的一行,最后在求这一行的最大和 #include#includeusing namespace std;const int INF=200010;int Row[INF][2],Col[INF][2];main(){ int i,j,R,C,temp; while(scanf("%d%d原创 2012-07-23 13:22:37 · 869 阅读 · 0 评论 -
hdu1069Monkey and banana -最大递增子序列dp
#includeusing namespace std;struct BOX{ int l,w,h;}box[200];int dp[200];bool cmp(BOX a,BOX b){ if(a.l==b.l) return a.w>b.w; else return a.l>b.l;}int main(){ int T=1,n,N,i,j,k; w原创 2012-09-20 21:52:47 · 763 阅读 · 0 评论 -
hdu1036Gangsters-dp
pku1036Gangstersdp[i]=max{ dp[ j ] } + p[ i ] , t[ i ] - t[ j ] >= abs(s[ i ] - s[ j ] )#include#include#include#include#include#includeusing namespace std;int dp[原创 2012-09-23 15:07:06 · 1117 阅读 · 0 评论 -
hdu1059Dividing 多重背包二进制优化
hdu1059#include#include#includeusing namespace std;int dp[440000],sum,n[7];int main(){ int i,j,k,left,T=1; while(scanf("%d%d%d%d%d%d",&n[1],&n[2],&n[3],&n[4],&n[5],&n[6])) { sum原创 2012-12-03 21:57:46 · 1269 阅读 · 0 评论 -
hdu3555 数位dp入门题
hdu3555给出T个N,对每一个N求1~N中有多少个数含49 (如 49,449,12349,2491等)参考#include#include#include#includeusing namespace std;__int64 N,dp[33][3],sum;int bit[33];int main(){ int i,j,T,len; m原创 2013-05-09 13:31:22 · 1568 阅读 · 0 评论