ACM[DP]
sevenster
= = 水男
展开
-
[U]Longest Prefix DP
茅厕顿开的一道DP题!那真是!突然知道了想通了!那编出来的速度真是快啊!抓牢DP的特征,构建DP方程~ 嘿嘿~/*ID:sevenst4LANG:C++PROG:prefix*/#include#include#define MAXN 200001using namespace std;int dp[MAXN];char item[201][12];char dat原创 2012-02-09 20:55:00 · 483 阅读 · 0 评论 -
HDU 3499 Flight spfa+dp
自认为相当正确的代码,交上去TLE了。以为是自己的方法错了,从昨晚开始想,到底错哪了?昨晚上看到了熟人的代码,依然大牛。网上的解法大多是正反向最短路+枚举折半边。这样得出。但是我的代码是:用dist[x][0]记录到x点使用折半票的花费,dist[x][1]记录到x点全票的花费。这样dp方程就很容易出来了... 自己想吧。今天下午改了改,发现这题光读入数据就要3600ms++,最终发现是我的s原创 2012-03-12 15:59:10 · 689 阅读 · 0 评论 -
HDU 2571 命运 水DP
消极题解凑数= =话说今天的水题有点多了= =本来想用最短路做的,但是不想那么麻烦,滚动数组也不想用,能水就水吧。记得以前做过一道类似的,不过是走路方针可以斜线,飞跃什么的,各种神。不过是BFS+队列罢了+GCD 罢了罢了还是水,不说了....#include#include#includeusing namespace std;int max( int a,int b ){原创 2012-03-12 17:35:08 · 479 阅读 · 0 评论 -
HDU 2577 How To Type DP
哈哈~这题秒掉了,总的来说这些天的DP苦修还是有点成果的。哇哈哈哈。做题过程大概是这样的,前几天看了下这题,完全不敢切,果断的没思路。今天再一看,在纸上用笔演练了下,发现基本上能推出公式了。呵呵,蛮好玩的么,DP,虽然只是道水题,但是也说明了我在进步啊~ 哈哈哈#include#include#includeusing namespace std;int min( int a,i原创 2012-03-12 16:53:51 · 622 阅读 · 0 评论 -
HUD I love sneakers! 变化的分组DP
网络上题解很多。我就不乱说了。首先分组背包的原型:给物品分组,容量为V的背包,每个分组内的物品互斥,每个分组最多取一个物品。求最大值。代码很简单:for( int i=0;i<group;i++ )for( int j=V;j>=0;j-- )for( int k=0;k<total[i];k++ ) f[V]=max( f[V],f[V-cost[k]]+value[原创 2012-03-13 11:43:10 · 700 阅读 · 0 评论 -
HDU Bone Collector II 背包的K优解
算法比较容易想到,每次做背包操作都会产生值的。记录下排序就好了。不过关于排序的问题我倒是wa了很久,本来开个3维数组把所有的解都记录下来,然后排序取出K大的就好了。但是却wa了= =没办法,看网上的题解吧。大家的方法和我想的差不多,也是对每个背包维护k个最优值。解法还是网上的,我就不废话了。就是记录2K个值,然后归并在一起。我的想法没错啊,为嘛WA呢=3=#include#inclu原创 2012-03-13 19:00:47 · 489 阅读 · 0 评论 -
HDU ACboy needs your help 隐藏的分组背包水题
前几天对这题编了码。自己本地都跑不过。罢了,谁叫我不会做呢= =。今天被树形DP虐了,没想法了= =。回头准备切切这题。分析了一下特点:总共要学习N天,每门课程学习的天数都有不同的价值。在每门课程中只能选择一个指定的天数来学。Wait!!! 怎么感觉好像分组背包的描述!背包容量为要学习的N天,每门课程为一个分组,分组中每个物品的代价是学分,花费是学习的天数。而分组背包为:在每个原创 2012-03-13 20:35:35 · 613 阅读 · 0 评论 -
HDU 3535 混合背包
看来还是需要好好理解背包的含义啊!本来鄙人写了3600+的代码,各种悲剧。果然还是对背包的理解不深啊!看过人家的代码后才A出来.....#include#include#includeusing namespace std;int dp[111][111];int max( int a,int b ){ return a>b?a:b; }int max( int a,in原创 2012-03-14 20:27:12 · 565 阅读 · 0 评论 -
HDU 1421 搬寝室
好好琢磨一下吧 DP....#include#include#include#includeusing namespace std;int f[2222][2222];int min( int a,int b ){ return a<b?a:b; }bool cmp( int a,int b ){ return a<b; }int powsum( int a,int b ){原创 2012-03-14 21:58:27 · 401 阅读 · 0 评论 -
POJ 2004 最长升序子序列
比赛中切掉的... 代码很冗余,没怎么仔细想总之,是一个最长升序子序列的题啦。#include#include#include#includeusing namespace std;struct node{ char line[25]; int len; int count[27];}date[11111];bool cmp( node a,n原创 2012-03-20 13:48:24 · 554 阅读 · 0 评论 -
HDOJ Robberies 01背包
囧爆了!!! 莫名其妙的就ac了。因为前段时间做了一道类似的题目,大概是出国留学的概率问题。和这题很像。然后凭借记忆把这题给敲了,一交就过了!我勒个去!不带这么玩的!!!果然做题多还是有点点好处的= =。话说题目我都没怎么看懂呢= =DP切不动了。记录一下题意吧:A-I题:acJ题:题意没看懂= =,下次再看= =K题:01背包的第K优解... 雷死哥了!L题:分组背包的变原创 2012-03-11 16:53:59 · 523 阅读 · 0 评论 -
HDOJ FATE 二维DP
一道很水的二维DP,但是对于DP没有什么感觉的我来说,真是辛苦了。这么来。[疲劳值][怪物数量]=经验值。这样保存的当前疲劳值获取的最大经验者。dp[i][j]=max( dp[i][j],dp[i-m_pl[k]][j-1]+m_exp[k] );当经验值满足升级的条件就可以了。#include#include#includeusing namespace std;in原创 2012-03-10 19:15:12 · 553 阅读 · 0 评论 -
[U]Cow Pedigrees DP
很明显的DP但是要注意的东西很多。不能盲目初始化,另外看的DP课件说的就是DP的特征,最优子结构,最优局部特性。找到DP的关键就在这里。/*ID:nocowsLANG:C++PROG:nocows*/#include#define MAXN 201#define MAXK 101#define mod 9901using namespace std;int main()原创 2012-02-09 19:50:37 · 616 阅读 · 0 评论 -
[U]Overfencing
简单DP/*ID:sevenst4;LANG:C++PROG:maze1*/#includeusing namespace std;char m[222][88];int hi[101][40];int fx( int x ){ return (x<<1)-1; }int fy( int y ){ return (y<<1)-1; }int min( int a,in原创 2012-02-10 16:05:51 · 512 阅读 · 0 评论 -
POJ 1887 一维DP 最长升序子序列 [暴弱]
弱爆了..... 我真水... 只会水。好久没来POJ刷水了。#include#includeusing namespace std;int max( int a,int b ){ return a>b?a:b; }int main(){ int date[10000]; int DP[10000]; int testcase=1; while(1)原创 2012-03-06 14:39:48 · 691 阅读 · 0 评论 -
NIOP 1999 导弹问题 最长升降序子序列 DP[小思路]
题目描述某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。输入格式输入数据为两行,第一行为导弹的数目N(n第二行导弹依次飞来的高度,所有高度值均为不大原创 2012-03-06 15:48:15 · 718 阅读 · 0 评论 -
NOIP2004 合唱队形
最近在做DP,好好静下心来学习吧....首尾两次最长升序子序列= =,好吧 很水..#includeusing namespace std;int max( int a,int b ){ return a>b?a:b; }int main(){ int N; int high[101]; int DP1[101],DP2[101]; memset( DP1,0,原创 2012-03-09 16:36:35 · 616 阅读 · 0 评论 -
HDOJ Dividing DP
没做过多重背包,这题从严格意义上来讲也不算是多重背包。算是很水的递推方程了。关键是看能不能找不出使得价格为sum/2的,通过递推连接就好了。关键是怎样可达...#include#include#includeint DP[120001];using namespace std;int main(){ int line[7]; int testcase=0; wh原创 2012-03-09 22:52:45 · 463 阅读 · 0 评论 -
HDOJ Big Event in HDU 多重背包
第一次遇到这样的题,平分= =,还要回去好好想一下...这么水的... 不懂啊= =#include#include#includeusing namespace std;int main(){ int n,m; int a[101],c[101]; int DP[100001]; while( scanf( "%d %d",&n,&m )!=EOF ) {原创 2012-03-09 22:55:32 · 550 阅读 · 0 评论 -
HDOJ The more, The Better 树形DP
算是树形DP的入门题吧。学习了一下人家的代码过的。在网上看了几种版本。果然还是dfs遍历树好啊。树形结构用指针来建的话可以省去很多麻烦。另外这题不能赤裸裸的从叶子节点更新,因为根是可以选择多个叶子的。没用完一个叶子,就必须把相应的父亲节点更新。还不错的题。#include#include#include#define MAXN 222using namespace std;stru原创 2012-03-11 15:26:12 · 477 阅读 · 0 评论 -
HDOJ 饭卡 01背包
水题。不过还是让我wa了几次。原来是在于初始化的问题。罢了罢了。想清楚还是很好的。去食堂买菜,最贵的是一定要刷卡的。留着刷吧,然后让其余的尽量接近5块钱就好了。和其他人的代码有点不同... 本质是一样的啦。代价和话费是一样的和那个BIG EVENT AT HDU那题一样。这种解法知道怎么做了。继续切。。。。#include#include#includeusing namespa原创 2012-03-11 18:48:54 · 487 阅读 · 0 评论 -
图论思想,DP构造求解
B-Travel By AirlineTime Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)Total Submission(s) : 24 Accepted Submission(s) : 1Font: Times New Roman | Verdana | Ge原创 2012-08-23 11:28:20 · 1137 阅读 · 0 评论