动态规划
文章平均质量分 62
talak
这个作者很懒,什么都没留下…
展开
-
hdu 1502 Regular Words
http://acm.hdu.edu.cn/showproblem.php?pid=1502 catalan数,可以直接套公式 这里居然有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 · 544 阅读 · 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 · 390 阅读 · 0 评论 -
hdu 1978 How many ways
http://acm.hdu.edu.cn/showproblem.php?pid=1978 DP 好吧,我不能很好的理解题目的意思 做法就是从每个点出发能到的曼哈顿距离的点就全部加上此点的路径数 先是DP写法,准备在写个记忆化搜索练习下 代码: #include #include #include #include #include #include #inclu原创 2012-11-06 00:17:58 · 340 阅读 · 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 · 411 阅读 · 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 · 567 阅读 · 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 · 472 阅读 · 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 · 337 阅读 · 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 · 638 阅读 · 0 评论 -
hdu 1505
hdu 1506的加强版 看了大牛的思路才会做 对每一行做一次1506的算法 不会的看博客hdu 1506 http://blog.csdn.net/talak/article/details/8108137 代码: #include #include #include #include #include #include #include #include #i原创 2012-10-25 11:00:13 · 330 阅读 · 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 · 313 阅读 · 0 评论 -
hdu 1421 搬寝室
http://acm.hdu.edu.cn/showproblem.php?pid=1421 先排序然后dp dp方程为: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 · 354 阅读 · 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 · 441 阅读 · 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 · 337 阅读 · 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 · 435 阅读 · 0 评论 -
hdu 3008 Warcraft
http://acm.hdu.edu.cn/showproblem.php?pid=3008 dp[i][j]表示第i秒 魔法值为j的时候对BOSS的伤害 这里用递推,因为你的魔法是在所有攻击完后才会增加#include #include #include #include #include #include #include #include #include using原创 2012-11-16 10:31:11 · 981 阅读 · 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 · 401 阅读 · 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 · 519 阅读 · 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 · 438 阅读 · 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 · 492 阅读 · 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 · 443 阅读 · 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 · 393 阅读 · 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 · 417 阅读 · 0 评论 -
hdu 1158 Employment Planning
http://acm.hdu.edu.cn/showproblem.php?pid=1158 dp[i][j] 表示第i月留j个人最少的话费 代码: #include #include #include #include #include #include #include #include #include using namespace std; #define Deb原创 2012-11-11 02:11:50 · 430 阅读 · 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 · 418 阅读 · 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 · 355 阅读 · 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 · 1006 阅读 · 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 · 413 阅读 · 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 · 450 阅读 · 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 · 1589 阅读 · 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 · 394 阅读 · 0 评论 -
合唱队形
合唱队形 Time Limit: 1000 ms Memory Limit: 65536 KB Total Submit: 95 Accepted: 54 Description N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1, 2, …, K,他们的身高分别为原创 2012-08-03 22:48:08 · 7001 阅读 · 1 评论 -
buy low buy lower
第一问很水,最长下降子序列 第二问很麻烦,我不会做,不仅要考虑每一种情况,还要判重,第一次找别人的题解,居然是错代码,当时我那个悲剧啊,第二次找了位大神的,代码很简洁,所以仿照他的写了一遍代码,也是有点模糊的懂,算了先挂在这里吧 #include #include #include using namespace std; #define maxN 5010 int dp[maxN],k原创 2012-08-06 17:16:28 · 897 阅读 · 0 评论 -
pills
2087 - Pills Accepted: 7 Submissions: 8 Time Limit: 1000 ms Memory Limit: 1048576 KB Aunt Lizzie takes half a pill of a certain medicine every day. She starts with a b原创 2012-08-12 23:09:05 · 625 阅读 · 0 评论 -
Robots on a grid
Robots on a grid Time Limit: 3000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class name: Main PrevSubmit Status Statistics Discuss Next You have rece原创 2012-08-14 16:30:31 · 558 阅读 · 0 评论 -
跑跑卡丁车 hdu
http://acm.hdu.edu.cn/showproblem.php?pid=1494 题意不说了 写的时候转移方程想错了,导致错了一天 第二次 写的时候又看别人解题报告然后自己写 还是错 方程貌似不太难想 但题目不看清的话 会被坑死的 我就被坑死了 第二次找错的时候才 发现自己把每个状态想错了 改了之后终于才AC 泪流满面啊 代码: #include #includ原创 2012-08-17 14:31:59 · 499 阅读 · 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 · 675 阅读 · 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 · 508 阅读 · 0 评论 -
hdu 2845 Beans
http://acm.hdu.edu.cn/showproblem.php?pid=2845 dp[i]表示在i之前(包括i) 最大得的分数 dp[i]=(dp[i],dp[i-2]+matrix[i]); 每一行这么求一次,然后最后一列竖着求一次 因为我不知道他的分数会不会为负数,所以我用的max有三个变量 代码: #include #include #include #i原创 2012-11-01 12:39:59 · 307 阅读 · 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 · 337 阅读 · 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 · 399 阅读 · 0 评论