动态规划
文章平均质量分 73
AledaLee
个人博客已经迁移到了https://sites.google.com/site/lishuo02wiki/,主要是一些技术的分享,有需要的可以访问。
展开
-
HDU-1503(最长公共子序列加强版)
这个题目还是挺有意思的就是,难点就是,输出的问题,,说说步骤,首先应该找到公共序列的i,j坐标,以及本身的值,然后就是遍历str1,如果遇到不是公共序列的i就输出,while循环;同样的是遍历str2,如果没有遇到公共序列中的j就一直输出,while循环;这些都输出都结束之后,就可以输出公共序列了.现在贴出我的代码,,今天下午一直状态不佳,,,诶,,主要是天气太热了点,,烦的要命.原创 2012-08-16 17:00:58 · 873 阅读 · 0 评论 -
9.3.1(0_1背包)
这是个很经典的背包问题咯,很简单吧,就是先排序,选择可以选择的最大有效物品贴出我的代码:#include #include #include #include #include using namespace std;const int maxn = 1005;int V;int N;struct node{ int v; int w;}n[maxn原创 2013-03-10 21:54:22 · 1075 阅读 · 0 评论 -
9.2.3(记忆化搜索_硬币问题)
真心好累,诶诶,如果自己不累点也就显示不出自己的价值了,所以还是累点好呀,呵呵.这个记忆化搜索还是不怎么会呢,,用vis好一点,,,不知道,这个写前面的程序可以不可以..一会我看一下,,这里面有一个陷阱就是,,vis[0] 你默认是0就好了,,要不然是求不出来的.代码:#include #include #include #include #include us原创 2013-03-10 20:53:51 · 913 阅读 · 0 评论 -
9.2.3(递推法_硬币问题)
用递推法求硬币问题, 很经典,,但是自己好困,,想睡觉了- -# 晕死,..贴出代码,等醒来的时候看一下好了#include #include #include #include #define MIN(a, b) (a) < (b) ? a : b#define MAX(a, b) (a) > (b) ? a : busing namespace std;c原创 2013-03-10 19:48:40 · 1079 阅读 · 0 评论 -
XMU-1028(典型的背包问题(dp))
1028.Game Boy AdvanceTime Limit: 2000 MS Memory Limit: 65536 K Total Submissions: 3967 (772 users) Accepted: 1137 (676 users) [ My Solution ]Description TheBeet很原创 2013-03-27 22:18:57 · 907 阅读 · 0 评论 -
ACMore-1488(数位DP)
1488: 1的数量Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 108 Solved: 26SubmitStatusWeb BoardDescription求区间[a,b]包含1的数量。例如区间[111,112], 整个区间包含两个数,分别为111,112,111包含3个1,而112原创 2013-04-16 22:23:11 · 849 阅读 · 0 评论 -
最长回文串模版
没看懂没看懂.回文串的问题没有看懂呀...贴出代码for (int i = 1; i < cnt * 2 + 2; i++) { if (MaxId > i) { p[i] = min(p[2 * id - i], MaxId - i); } else { p[i] = 1; } while (str[i + p[i]] == str[i原创 2013-05-09 21:53:48 · 710 阅读 · 0 评论 -
POJ-1664(放苹果)
最基本的组合数学的题目我却墨迹了半天,十分的没有效率。不知道怎么办了都,一定要提高效率,要不然真的不行。放苹果Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 23439 Accepted: 14873Description把M个同样的苹原创 2013-07-13 17:49:10 · 858 阅读 · 0 评论 -
《算法竞赛-训练指南》第三章-RMQ
RMQ求区间内的最大值,最小值。平常的区间更新算法都不很好求,当然线段树可以。马上写线段树的算法。具体的讲解都在代码中:#include #include #include #include using namespace std;const int MAXN = 1000 + 11;int A[MAXN];int N;int d[MAXN][22];void原创 2013-09-02 22:12:24 · 724 阅读 · 0 评论 -
9.3.2(规划方向)
其实不用存着w和v的贴出代码:#include #include #include #include using namespace std;const int maxn = 1111;int N;int V;int f[maxn][maxn];int main(){ while (scanf("%d%d", &V, &N) != EOF) { in原创 2013-03-11 13:34:16 · 741 阅读 · 0 评论 -
9.2.1(矩形嵌套_最长子序列方法)
原来就是初始化的时候要把所有的d都初始化为1;因为每一个点的,初始化结果就是1;开始的时候没有意识到,,,#include #include #include #include #include #define max(a, b) (a) > (b) ? (a) : (b)using namespace std;const int maxn = 1005;str原创 2013-03-09 10:50:24 · 950 阅读 · 0 评论 -
HDU-1159(DP_最长公共子序列)
看了一上午的DP了,下午去家教了就没有看了,,,但其实在很久以前我已经解除过DP了,为什么今天又继续学习呢,,主要是觉得,这是一种思想,是一种类似于设方程一样的思想,,掌握了这种思想,以后再接题目的时候就可以得心应手了,所以自己一定要掌握的灵活自如才能真正的学号ACM.我总是给嘉豪说(我的家教对象),如果你不用心,效率的学习,就跟没有学习过一样,那样的话,我们还不如一起去玩呢? 你觉得呢?原创 2012-08-15 21:01:36 · 1720 阅读 · 0 评论 -
HDU-1160(最长递增子序列)
今天下午一点状态也没在,,这个也改不过来了先贴上别人的代码和自己的错误代码等有空自己再改吧#include #include struct No{int w;int s;int num;}a[1005];int cmp(const void *c,const void *d){return *(int *)c-*(int *)d;}int main (){i原创 2012-08-16 14:45:03 · 923 阅读 · 0 评论 -
HDU-1087(最长递增序列)
其实一开始就有思路的,但是,我一看,算法是两重循环..虽然不超时,觉得还是不好,觉得DP应该不会这样吧...别了我很长时间,最后还是想去试试吧,,试了一试,还真是这么算..晕了.贴出代码:#include #include #include #include int a[1005];int dp[1005];int max(int a,int b){ retu原创 2012-08-16 10:17:21 · 689 阅读 · 0 评论 -
HDU-1864(DP_01)
这道题目真心写戳了...难看死了..没办法,,因为没有专心的去写,,一会来信息了 一会去拿个快递呀什么的...所以这个写成这样子了...都想死了..可是不想重写了 就贴上去了...#include #include #include #include int sum;int N;//N represents the number of checksint num[1000原创 2012-08-17 10:37:11 · 721 阅读 · 0 评论 -
HDU-2955(DP_01背包)
我都崩溃了,,这是个什么题目呀,,,我弄了半天,,,都过了970多秒了,,,我还郁闷了,,也会有卡DP的???还一起自己算法有问题呢..一上网查..老天.理解都错这呢...那我就不懂了,,,理解都出错了,,那970多秒是这么过的???晕死了.. 65928492012-08-17 22:24:06Time Limit Exceeded295510原创 2012-08-17 22:22:29 · 590 阅读 · 0 评论 -
9.1.2(简单DP---递推法、记忆化搜素)
基础dp,递推法的有点就是简单,从下到上,依次求得答案,而且不用多次计算已经计算得到的dp,需要注意的就是开始一定要先把最底层算出来,然后从第二层开始地推而记忆化搜索呢,一定要注意的就是开始的时候的赋值,将所有的dp都赋值成-1,而去掉重复计算的方法呢,也就很简单了,就是判断dp是不是负数,如果是负数,说明还没有更新过次结点,就可以计算,如果大于零了,,说明已经计算过了原创 2013-03-08 20:26:49 · 1126 阅读 · 0 评论 -
9.2.1(DAG的dp)
晕死,,,反正是对不了..都是自己写代码的风格不行呀,,怎么也写不对了- -#烦死了都,,,不知道是怎么错了..好像和别人写的差不多呀自己的:#include #include #include #include #define max(a, b) (a) > (b) ? (a) : (b)using namespace std;struct node{原创 2013-03-08 21:46:42 · 913 阅读 · 0 评论 -
9.2.2(矩形嵌套_简单动态规划)
晕死了,,总算找到了自己错在哪里了,,,人家标程用的dp求法是记忆化搜索,,你的那个记忆化虽然是有了,,,但是,你没有一次性将结果用好,也就是你没有一次dp就把结果存过去,看代码吧:#include #include #include #include #define max(a, b) (a) > (b) ? (a) : (b)using namespace原创 2013-03-09 09:13:00 · 1323 阅读 · 1 评论 -
一道神奇的题目-龟兔赛跑
神奇的龟兔赛跑题目,整的整死我了。想想自己的思考过程,好像这种摸不到头脑的阶段最优解的题目是要用动态规划的,不过动态规划实在是太动脑筋了,这真不是一天两天能够学好的,慢慢积累知识吧。贴出代码:#include #include #include #include using namespace std;const int MAXN = 100 + 11;int p[M原创 2013-09-13 21:39:29 · 2240 阅读 · 2 评论