DP
quinwu-
这个作者很懒,什么都没留下…
展开
-
uva 437 The Tower of Babylon(DAG的DP)
巴比伦塔。题目就是说人们要建造巴比伦塔,给了很多种种类不同的砖,给出的三个数据依次是砖块的长宽高,(反正我是这么理解的,不过顺序无所谓)。很显然,一个长方体有三个不同的面。在三维坐标系下就是x0y,x0z,y0z平面。这个题就是说这三个面都可以使用,来堆积砖块,但是有要求,上面的砖块的底面的长宽都要一次比下面砖块的小。不是总面积小,要注意! 哪怕是上面砖底面的某条边跟下面平面的长度相同都不原创 2013-07-17 18:48:56 · 1506 阅读 · 0 评论 -
poj 1837 Balance(背包)
看完题。。完全想不到怎么来建立背包模型。。看了下别人的思路,吃了个惊。大神的题解:点击打开链接题目大意:有一个天平,告诉你挂钩的位置,还有一些砝码的重量,让你来求解有几种组合使得当所有的砝码都挂在天平上的时候天平可以平衡。数据:2 4 //天平挂钩的位置跟砝码的数量-2 3 //挂钩的位置,负数表示在天平的左边,正数表示挂钩在天平的右边3 4 5 8 //砝码的重量原创 2014-03-03 21:20:10 · 623 阅读 · 0 评论 -
poj 1742 Coins (多重背包)
楼教主“男人八题系列”。说下题目的意思吧,给你一些钱的价值和数量,在不超过m的情况下有多少种情况的面值可以被拼出来。钱币共有n组典型的多重背包。第一次写,当时看背包九讲看到的,他们说要用什么的多重背包的单调队列优化能过,我用的一个普通的2进制优化ZeroOnePack也可以过,应该是踩着线过的吧。然后看了下传说中的多重背包单调队列优化,结果发现看不懂 。大牛的国家队论文好难理解。还得花原创 2014-03-03 21:01:12 · 599 阅读 · 0 评论 -
NOJ 1023 防御导弹(dp+贪心)
经典的DP+贪心题目先用DP求出一个系统所能拦截的最大数量,然后用贪心求出拦截系统的最少数量即可。要注意的是邻接矩阵的存储细节。对角线元素为0,若存在多种数据相同,不能看做有向图中的同一顶点。#include #include #define INF 0x7fffffffint cnt;int G[25][25];int d[25];int p[25];int height[25];int mai原创 2013-07-15 17:34:17 · 742 阅读 · 0 评论 -
HDU 1466 计算直线的交点数(dp)
采用数组dp[i][j]。若dp[i][j]==1,则说明放i条直线有j个交点,则只需要把dp[n][i]从i=0到i=190扫一遍,因为20条直线最多有190个交点。转移为:要求i条直线有多少个交点,则此i条直线可以分为两组,一组是j条平行线,另外一组是i-j条自由线,则此种交法的交点数就为(i-j)*j+k(k为j条自由线的交点数)PS: DP智商是硬伤。。。。这还是想了好久,参考别人的。。原创 2013-07-15 17:34:19 · 730 阅读 · 0 评论 -
HDU 1003 MaxSum(dp)
最大子序列。DP#includeint main(){ int t,k,n = 0,cnt[100010],start,end,position,summax,thismax; scanf("%d",&t); while(t--) { n++; scanf("%d",&k); for(int i = 1 ; i {原创 2013-07-15 17:34:21 · 615 阅读 · 0 评论 -
uva 10285 Longest Run on a Snowboard(dp+记忆化搜索)
dp+记忆化搜索。告诉你一个山脉的一组高度,让你按照高度的降序滑行,要求能求出最大的滑行距离,即最长降序子序列。但题目要求了滑行的方向只能为上下左右。#include#include#includeusing namespace std;const int Maxsize = 200;int n,m;int cnt[Maxsize][Maxsize],ans[Maxsize原创 2013-07-17 17:39:32 · 666 阅读 · 0 评论 -
NOJ 1837 美女购物(DP,DAG图)
难得的dp水题。题目:一天,GG陪佳佳逛街,看到有许多漂亮的衣服,佳佳要让GG给她买衣服,但是GG发现衣服的价格实在高的令人胆寒,GG当然不愿意买这么贵的衣服,但是他又想让佳佳高兴.因此GG就想着从街头逛到街尾买到的衣服价格不能比前一件购买的价格高,绝不回头购买,而且他想尽可能的多买几件衣服,你能帮帮他吗?。。数据:16 300 250 275 252 200 138 245 130 300 1原创 2013-07-15 17:34:12 · 776 阅读 · 0 评论 -
poj 2250 Compromise(LCS,最长公共子序列)
看上去挺复杂的,将每个单词看做一个数组元素,将二维数组看做一维“字符串”,可以很显然的知道用lcs来做了。还有个要注意的地方是输出时的格式控制,最后一个单词后没有空格输出,全部数据已文件末尾结束输入。LCS要求打印出LCS串,在标记路径时也要认真点。 #include #include #include using namespace std; char temp[35]; char str1[1原创 2013-07-15 17:34:53 · 755 阅读 · 0 评论 -
HDU 1159 Common Subsequence(LCS)
最长公共子列,不要求输出路径就变得很简单。#include #include int main(){ char str1[505],str2[505]; int len1,len2,c[505][505]; while(scanf("%s",str1)!=EOF) { scanf("%s",str2); len1 = strlen(str1);原创 2013-07-15 17:34:24 · 594 阅读 · 0 评论 -
poj 1014 Dividing(多重背包)
题目大意:有价值分别为1到6的6种大理石,liang'ge原创 2014-04-26 17:10:21 · 572 阅读 · 0 评论