dp
文章平均质量分 73
Balloons2012
这个作者很懒,什么都没留下…
展开
-
poj1155 (树形dp)
#include#include#define inf 1000000000#define max(x,y) ((x)>(y)?(x):(y))int N,M;typedef struct{int d,v,next;}node;node tree[6010];int vc[3001],value[3001];int dp[3001][3001]; int ptr=1; int n原创 2012-08-08 10:51:54 · 638 阅读 · 0 评论 -
hdu 4412 Sky Soldiers (dp)
具体思路的解释见 http://hi.baidu.com/renxl51/item/d7437a30bca43883f4e4ad0df[i][j] 表示用j个点覆盖前i个点。 f[i][j]=min{ f[k][j-1] + cost } ( j-1 #include#include#include#include#define INF ((1<<23)-1)u原创 2012-10-07 19:53:42 · 1070 阅读 · 0 评论 -
hdu 2844(背包)
#include#include#includeusing namespace std;int dp[100010],w[110],c[110];int main(){ int n,m,i,j,k,cnt; while( scanf("%d%d",&n,&m),n+m ) { cnt=0; memset(dp,0,sizeof(d原创 2012-10-06 19:31:06 · 877 阅读 · 0 评论 -
斜率优化DP
引用一片经典的文章:http://blog.sina.com.cn/s/blog_508dd1e60100tvk0.html 最近发现HDU上的题目ms比POJ上的好些似的, 因为每次都是一道题搞一天。 也说明我真的还是很菜啊。 昨天搞了一道题,一道最短路的题目,弄了一天。其实最主要的原因是没有搞清楚Dijkstra、SPFA、Bellman_ford这几个最短路算法的复杂度。这里作个原创 2012-08-27 16:28:02 · 7575 阅读 · 1 评论 -
hdu 2829
f[i][j] 表示到j为止,前面断了i条路的最小值;dp方程:f [i][j]= min { f[i-1][k] + cost( k+1 , j ) } ( i 这是n^3的dp,可以用斜率优化为n^2; 主要是求出 cost( k+1 , j )的表达式。 求出表达式后就可以设出x和y以及斜率K; 判断一下x或者y是否单调,以及k是否单调。 然后就基本上是套模板了。原创 2012-09-03 13:10:25 · 1017 阅读 · 0 评论 -
树形dp 求期望 HDU4035
特此声明:转载自 http://blog.csdn.net/morgan_xww/article/details/6776947 ,觉得比较好,就转载过来,如有版权问题,我立即删掉。比赛时看题了,但是没有思路。比赛结束后这题总共通过20+,赛后看这个解题报告,由于博主说得太简洁,而我又是从来没有见过这种dp求数学期望的题,所以研究了好久都木有明白。只有搜索一下【dp求期望】转载 2012-08-21 14:22:24 · 1300 阅读 · 0 评论 -
hdu 2993
这个应该就是斜率优化了。(由于用到单调队列,好像也有叫单调队列优化的)题目的意思很简单,给出N个正整数,求最大的,长度大于K的某一段的平均值。设部分和数组为S,则容易得到方程 (S[j]-S[i-1])/(j-i+1),这可以看做(i,S[i])和(j,S[j])的斜率,那么问题转化为求n个点中水平距离至少为k的最大斜率。#include#define LL long longty原创 2012-08-30 22:25:54 · 1050 阅读 · 0 评论 -
hdu 4362
单调队列优化dp,主要是去除绝对值时,分为两种情况。排完序后,利用单调性可以减少复杂度。具体看代码。#include#include#includeusing namespace std;typedef struct{ int x,val;}Node;Node L[1010],R[1010]; Node Ball[51][1010];int f[51][1010];in原创 2012-08-30 13:01:23 · 572 阅读 · 0 评论 -
2011年全国大学生程序设计邀请赛(福州)——Tiling
TilingTime Limit: 1000msMemory Limit: 32768KBThis problem will be judged on FZU. Original ID: 204064-bit integer IO format: %I64d Java class name: MainPrev Submit Status Statistics Discuss NextFo原创 2012-08-19 18:09:58 · 2162 阅读 · 0 评论 -
HDU 4340 树形DP
2012 Multi-University Training Contest 5Capturing a countryTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Problem DescriptionAnt and Bob two army want to cap原创 2012-08-18 02:39:01 · 773 阅读 · 0 评论 -
codeforces 130 solitaire
第一反应是搜索,但裸搜会超时,所以考虑记忆化搜索。f[x][a][b][c]表示当前处理到第x堆,倒数第一第二第三堆的原来序号(也就是覆盖后的序号)为a,b,c; 这里的a和x是一样的吗?不是的,只能说a现在的位置在第x个位置。 f[x][a][b][c]= { f[x-1][b][c][a] || f[x-1][a][c][x-3] } 分别对应放在n-3的位置和n-1的位置的两种原创 2012-08-13 19:12:53 · 525 阅读 · 0 评论 -
hdu 4359 Easy Tree DP?
f[i][j]表示i个节点构造的深度小于等于j的二叉树的种数。 题目要求的就是 f[N][D] - f[N][D-1]则状态转移分为两种情况:情况一:当前节点i只有一颗子树,则f[i][j]=C[i][i-1]*f[i-1][j-1]*2; 乘以2是因为左右两棵子树的情况。C表示组合数。情况二:当前节点有两棵子树,则由于题目条件限制,右子树的和大于左子树(即除了根节点外剩下的最大值必须原创 2012-08-12 19:53:02 · 1042 阅读 · 0 评论 -
poj1947(树形dp)
f[i][j]表示以i为根的树保留j个节点所需要剪断的最少的边数;状态转移方程:f[i][j]=min( f[i.son][k]+f[i][j-k]-1,f[i][j] ) 之所以有减1是因为计算f[i][j-k]时是把i->i.son的边剪断了的。#include#include#define min(x,y) ((x)<(y)?(x):(y))typedef struct{原创 2012-08-08 20:18:41 · 1582 阅读 · 0 评论 -
hdu 4276 The Ghost Blows Light
先找到1到n的路,然后对这条路上的每个点进行一次树形dp,最后对路上的点再dp一次。#include#include#include#includeusing namespace std;vector s[220];int w[210]; int cost[110][110],mark[110]; int N,T,sign,tt;int dp[210][510],f[110][510原创 2012-09-20 20:23:42 · 650 阅读 · 0 评论