
动态规划
文章平均质量分 62
talak
这个作者很懒,什么都没留下…
展开
-
hdu 1502 Regular Words
http://acm.hdu.edu.cn/showproblem.php?pid=1502catalan数,可以直接套公式这里居然有DP方程,太神了dp[i][j][k]=dp[i-1][j][k]+dp[i][j-1][k]+dp[i][j][k-1];i-1>=j>=k,i>=j-1>=k,i>=j>=k-1 这里要分别讨论初始化也是个问题方程解释一下,dp[i]原创 2012-11-16 21:43:07 · 575 阅读 · 0 评论 -
hdu 1078 FatMouse and Cheese
http://acm.hdu.edu.cn/showproblem.php?pid=1078哈哈 记忆化搜索 第一次自己写的过了努力终于有回报了啊^-^代码:#include #include #include #include #include #include #include #include #include using namespace std;in原创 2012-11-09 19:35:36 · 426 阅读 · 0 评论 -
hdu 1978 How many ways
http://acm.hdu.edu.cn/showproblem.php?pid=1978DP好吧,我不能很好的理解题目的意思做法就是从每个点出发能到的曼哈顿距离的点就全部加上此点的路径数先是DP写法,准备在写个记忆化搜索练习下代码:#include #include #include #include #include #include #inclu原创 2012-11-06 00:17:58 · 379 阅读 · 0 评论 -
hdu piggy-bank 1114
http://acm.hdu.edu.cn/showproblem.php?pid=1114完全背包求最小值这题貌似正着求一次 用个二维就行了我的方法有点2B 反着求 用了二进制优化二维的懒的写了代码:#include #include #include #include #include #include #include #include #in原创 2012-11-07 12:35:03 · 439 阅读 · 0 评论 -
hdu 2191 HDU 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
http://acm.hdu.edu.cn/showproblem.php?pid=2191简单多重背包题目代码:#include #include #include #include #include #include #include #include #include using namespace std;int f[105];struct node{原创 2012-11-07 00:21:36 · 598 阅读 · 0 评论 -
hdu 2571 命运
http://acm.hdu.edu.cn/showproblem.php?pid=2571一开始就有了思路了不过中途各种边界问题和初始化问题,而且方程也写错了方程dp[i][j]=max(dp[i-1][j]+maps[i][j],dp[i][j-1]+maps[i][j]);and while(sign {原创 2012-10-26 12:38:09 · 499 阅读 · 0 评论 -
hdu 1159 Common Subsequence
http://acm.hdu.edu.cn/showproblem.php?pid=1159最长公共子序列不解释代码:#include #include #include #include #include #include #include #include #include using namespace std;char word1[1005];char w原创 2012-11-03 11:36:57 · 366 阅读 · 0 评论 -
hdu 2602
http://acm.hdu.edu.cn/showproblem.php?pid=2602简单01背包,但这道题要卡你骨头重量为0的数据,因为重量为0就可以无限放了,这题按照那种优化空间复杂度的那种倒着DP的方法 能秒A但按普通那么写的同学就悲剧了 我这里提供以下这种写法这是要把容量从0枚举而已,而且要把上一次的状态继承下来代码:#include #include #in原创 2012-10-25 12:09:14 · 673 阅读 · 0 评论 -
hdu 1505
hdu 1506的加强版看了大牛的思路才会做对每一行做一次1506的算法不会的看博客hdu 1506http://blog.youkuaiyun.com/talak/article/details/8108137 代码:#include #include #include #include #include #include #include #include #i原创 2012-10-25 11:00:13 · 363 阅读 · 0 评论 -
hdu 2830 Matrix Swapping II
http://acm.hdu.edu.cn/showproblem.php?pid=2830先求出每一行的高度,然后对于每一行有多少个 存在高度 用个hash存起来后面枚举的时候 先排序从大到小,然后 二维只枚举到hash存起来的数就行了,排序是为了方便求对于每一行求矩阵且节省时间,因为0的就跳过了矩阵求法 ans=max(height[i][j]*j,ans); 因为前面大的原创 2012-11-02 22:57:18 · 334 阅读 · 0 评论 -
hdu 1421 搬寝室
http://acm.hdu.edu.cn/showproblem.php?pid=1421先排序然后dpdp方程为:dp[i][j]=min(dp[i-2][j-1]+(num[i]-num[i-1])^2,dp[i-1][j]);表示到i之前(包括i)搬j对需要的最少疲劳值注意处理好一下边界就好代码:#include #include #include #in原创 2012-11-03 17:52:29 · 376 阅读 · 0 评论 -
hdu 1025 Cstructing Roads
http://acm.hdu.edu.cn/showproblem.php?pid=1025对p进行排序,然后就是对rich的最长上升子序列的求法,只是o(n^2)的算法不行,要用d[i]表示序列长度为i时,最小的数为d[i],查找的时候用二分查找,查完的在把最小的放进去代码:#include #include #include #include #include #in原创 2012-11-09 14:44:10 · 480 阅读 · 0 评论 -
hdu 1081 To The Max
http://acm.hdu.edu.cn/showproblem.php?pid=1081转换成 最大连续子序列就行了代码:#include #include #include #include #include #include #include #include #include #include using namespace std;int matrix原创 2012-11-09 21:57:19 · 379 阅读 · 0 评论 -
hdu 1503 Advanced Fruits
http://acm.hdu.edu.cn/showproblem.php?pid=1503最长公共子序列 用个p[i][j]记录dp[i][j]是从哪个位置传递过来的然后dfs输出,基本都是看的别人题解,然后自己写的,就不多说了代码:#include #include #include #include #include #include #include #inc原创 2012-11-17 12:07:53 · 492 阅读 · 0 评论 -
hdu 3008 Warcraft
http://acm.hdu.edu.cn/showproblem.php?pid=3008dp[i][j]表示第i秒 魔法值为j的时候对BOSS的伤害这里用递推,因为你的魔法是在所有攻击完后才会增加#include #include #include #include #include #include #include #include #include using原创 2012-11-16 10:31:11 · 1015 阅读 · 0 评论 -
hdu 1227 fast food
http://acm.hdu.edu.cn/showproblem.php?pid=1227 dp[i][j]=min(dp[i-1][k]+cost[k+1][j],dp[i][j]);dp[i][j]表示供应点个数为i的时候对于前j个位置,最小的sum这里i到j这个区间中 取一个点使之所有点到这个点取得最小的距离和 那么这个点必定在(i+j)/2的位置cost[i][j]表示i原创 2012-11-14 16:07:59 · 438 阅读 · 0 评论 -
hdu zipper 1501
http://acm.hdu.edu.cn/showproblem.php?pid=1501记忆化搜索由于第三个串是由 前两个串按顺序组成的 那么从前两个串的 第一位 和 第三个串的第一位 开始比 相等就比下一个能比到尾就行了从这些路径中找出可行的 记忆化搜索代码:#include #include #include #include #include #incl原创 2012-11-14 00:05:37 · 558 阅读 · 0 评论 -
hdu 1422 重温世界杯
http://acm.hdu.edu.cn/showproblem.php?pid=1422暴力水过,正解应该是DP最长非负子序列a[i]为第i个 生活费-花费if(sum[i-1]+a[i]>=0){ dp[i]=dp[i-1]+1; sum[i]=sum[i-1]+a[i]; maxn=max(maxn,dp[i]);}else原创 2012-11-12 21:40:26 · 476 阅读 · 0 评论 -
hdu 1074 Doing Homework
http://acm.hdu.edu.cn/showproblem.php?pid=1074状态压缩DP 的模板题学习了一下状态压缩DP这里处理字典序的方法 有排序,貌似排序的还简单一些我用的指针signp指向上一个状态,p指向状态对应取的字符串代码:#include #include #include #include #include #inclu原创 2012-11-12 18:51:14 · 523 阅读 · 0 评论 -
hdu 2059 龟兔赛跑
http://acm.hdu.edu.cn/showproblem.php?pid=2059一开始想多了代码基本上抄的 关键是没搞懂为什么不考虑加油为什么也能 AC仔细一看 原来j=0的时候就已经把每个状态的不加油的情况考虑进去了代码:#include #include #include #include #include #include #include #i原创 2012-11-10 23:05:39 · 471 阅读 · 0 评论 -
hdu Human Gene Functions
贴个算是自己写的,比以前理解一些了代码:#include #include #include #include #include #include #include #include #include using namespace std;int cal[305][305];char arr[105];char brr[105];int dp[105][105]原创 2012-08-01 20:08:17 · 434 阅读 · 0 评论 -
hdu 1059 Dividing
http://acm.hdu.edu.cn/showproblem.php?pid=1059多重背包 用二进制优化 本来还想直接从小到大放的那个方法 貌似只适用于完全背包代码:#include #include #include #include #include #include #include #include #include using namespace原创 2012-11-11 09:38:23 · 450 阅读 · 0 评论 -
hdu 1158 Employment Planning
http://acm.hdu.edu.cn/showproblem.php?pid=1158dp[i][j] 表示第i月留j个人最少的话费代码:#include #include #include #include #include #include #include #include #include using namespace std;#define Deb原创 2012-11-11 02:11:50 · 462 阅读 · 0 评论 -
hdu 1506
http://acm.hdu.edu.cn/showproblem.php?pid=1506用DP 用l[i] 和r[i]存对应位的左边界 和右边界但找左右边界的时候不能暴力找 要迭代的方法找 不然会超时左:while(l[i]-1>0&&num[l[i]-1]>=num[i]){ l[i]=l[l[i]-1];}边界出来了 面积好算了吧就这样代码:原创 2012-10-24 17:40:59 · 444 阅读 · 0 评论 -
hdu 2870 Largest Submatrix
http://acm.hdu.edu.cn/showproblem.php?pid=2870和1506 和1505类似的解法一个关键的优化就是if(!num[j]) continue;说实话不是想不到,关键是懒的加,因为看起来不可能优化多少现在知道了,以后能优化的尽量优化,这个不加就是超时与不超时的关系代码:#include #include #inclu原创 2012-11-02 00:28:43 · 391 阅读 · 0 评论 -
hdu 寒冰王座
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1248一开始是知道是完全背包问题的,但是不会完全背包,也不能叫全不会,只是理解了一点,还差一点就会了刚开始写的时候按照f[i][j]=max(f[i-1][j],f[i-1][j-k*weight[i]]+k*weight[i]);到后来才知道是直接求里面最大的f[i][j]=max(f[i-1原创 2012-05-25 23:32:35 · 1042 阅读 · 0 评论 -
hdu FatMouse's Speed 1160
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160先对weight排序,然后根据speed求最长上升的序列关键是老鼠的编号输出不怎么好高,原来只要用个before变量 记录前个编号就行了我的想法不同,有点2,所以找错也早了好久挫代码如下:#include #include using namespace std;int i,原创 2012-05-31 16:48:29 · 444 阅读 · 0 评论 -
humble number hdu 1058
刚开始想暴力,想来想去还是照谢大说的DP吧不过这输出有点蛋疼代码:#include #include #include using namespace std;long long num[6000];long long min(long long a,long long b,long long c,long long d){ long long k;原创 2012-06-01 13:52:01 · 478 阅读 · 0 评论 -
max sum
链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003卧槽,转移方程f(n)=max(f(n-1)+k(n),k(n))这个问题不大,TMD要输出从哪个数开始到哪个数结束,这个好坑爹有木有,弄了好久最近写的代码不想贴了,比以前的代码挫的要命,真是一日不如一日这是很久以前写的:#include int main(){原创 2012-06-11 13:31:30 · 1643 阅读 · 0 评论 -
hdu 最少拦截系统
http://acm.hdu.edu.cn/showproblem.php?pid=1257其实就是一个最长上升子序列的求法,只是难得想到而已;代码:#include #include #include #include #include #include #include using namespace std;int signnum[10000005];int原创 2012-08-01 23:28:47 · 424 阅读 · 0 评论 -
合唱队形
合唱队形Time Limit: 1000 ms Memory Limit: 65536 KBTotal Submit: 95 Accepted: 54 DescriptionN位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为原创 2012-08-03 22:48:08 · 7153 阅读 · 1 评论 -
buy low buy lower
第一问很水,最长下降子序列第二问很麻烦,我不会做,不仅要考虑每一种情况,还要判重,第一次找别人的题解,居然是错代码,当时我那个悲剧啊,第二次找了位大神的,代码很简洁,所以仿照他的写了一遍代码,也是有点模糊的懂,算了先挂在这里吧#include#include#includeusing namespace std;#define maxN 5010int dp[maxN],k原创 2012-08-06 17:16:28 · 937 阅读 · 0 评论 -
pills
2087 - PillsAccepted: 7 Submissions: 8 Time Limit: 1000 ms Memory Limit: 1048576 KBAunt Lizzie takes half a pill of a certain medicine every day. She starts with a b原创 2012-08-12 23:09:05 · 662 阅读 · 0 评论 -
Robots on a grid
Robots on a gridTime Limit: 3000msMemory Limit: 65536KB64-bit integer IO format: %lld Java class name: MainPrevSubmitStatus Statistics Discuss Next You have rece原创 2012-08-14 16:30:31 · 588 阅读 · 0 评论 -
跑跑卡丁车 hdu
http://acm.hdu.edu.cn/showproblem.php?pid=1494题意不说了写的时候转移方程想错了,导致错了一天第二次 写的时候又看别人解题报告然后自己写 还是错方程貌似不太难想 但题目不看清的话 会被坑死的我就被坑死了第二次找错的时候才 发现自己把每个状态想错了改了之后终于才AC 泪流满面啊代码:#include #includ原创 2012-08-17 14:31:59 · 532 阅读 · 0 评论 -
Max Sum Plus Plus
#include #include #include #include int num[1000055];int now[1000055];int pop[1000055];int max(int a,int b){ return a>b?a:b;}int main(){ int m,n,i,j,k; while(scanf("%d%d",&m,&n)原创 2012-07-28 11:45:01 · 703 阅读 · 0 评论 -
hdu 4341 Gold miner
分组背包,先排序处理共线的,对边同一组的要先选前面的才能选后面的,所以后面的加上前面的时间和价值在做分组背包处理代码:#include #include #include #include #include #include using namespace std;int total,gold;int dp[40005];int k,sign=1;struct原创 2012-08-11 15:22:34 · 551 阅读 · 0 评论 -
hdu 2845 Beans
http://acm.hdu.edu.cn/showproblem.php?pid=2845dp[i]表示在i之前(包括i) 最大得的分数dp[i]=(dp[i],dp[i-2]+matrix[i]);每一行这么求一次,然后最后一列竖着求一次因为我不知道他的分数会不会为负数,所以我用的max有三个变量代码:#include #include #include #i原创 2012-11-01 12:39:59 · 334 阅读 · 0 评论 -
hdu 2844 coins
http://acm.hdu.edu.cn/showproblem.php?pid=2844多重背包+二进制优化学习了一下 二进制优化卡在了 二进制的判定那 int len=0; int num=1; while(w[i]-num*2+1>0) { d[len原创 2012-10-31 23:01:04 · 373 阅读 · 0 评论 -
hdu 1231
和max sum那道题有点类似代码:#include #include #include #include #include #include #include #include #include #include using namespace std;int f[10005];int sum[10005];int main(){ int n; w原创 2012-10-20 20:16:25 · 457 阅读 · 0 评论