
DP。
文章平均质量分 65
natsuyu
这个作者很懒,什么都没留下…
展开
-
【HDU 2955 概率dp or(背包)】
好久没登优快云了…感觉本科阶段最后一段时间用了吧…研究生打算换到简书试试…说到读研其实整个人还是懵逼的…本来觉得没什么,但是前两天在图书馆看到前端的书,忽然又想起之前面试的时候…放弃offer这件事真的是感觉可惜得要满地打滚了。不知道会不会被网易爸爸拉黑…然而感觉研究生出来可能还是做前端(doge脸…)感觉读研出来应该找一个看上去高端一点的职位,比如架构师,数据分析啥啥的…但是秉承着干一行爱原创 2016-11-30 11:01:22 · 341 阅读 · 0 评论 -
HDU1074【状压DP】
最多15个作业,如果全排列则共有15!种,但是这样会计算很多重复的值,用状压DP,遍历2^15,可以枚举所有作业的出现顺序,并且通过记录,可以进行递推。初始状态是0,最后的状态是2^16-1(111111....)表示所有的作业都已经做过了。#include #include #include #include #include using namespace std;#def原创 2015-09-02 10:05:37 · 325 阅读 · 0 评论 -
CCF 有趣的数 【DP】
问题描述我们把一个数称为有趣的,当且仅当:1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次。2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前。3. 最高位数字不为0。因此,符合我们定义的最小的有趣的数是2013。除此以外,4位的有趣的数还有两个:2031和2301。请计算恰好有n位的有趣的数的个数。由于答案原创 2015-08-10 14:28:58 · 584 阅读 · 0 评论 -
HDU 2089 【数位DP+复习】
囧。。。这道题又捣鼓了很久。。。以前也做过。。说明没有理解透嘛。。真的非常shy。。dp[i][j]表示第i 位上的数是j的时候符合情况的情况数(没有4没有62),计算这个值,就是枚举前一位的数(0-9)符合情况的数相加即得。而且枚举的时候要从高位到低位枚举,因为每次枚举的数的范围是(0-dig[i]-1)所以当枚举下一位的时候(dig[i-1]),当前位就是dig[i]了。并且由于要原创 2015-08-10 08:25:15 · 361 阅读 · 0 评论 -
POJ 2559 dp 【复习】
题目不看全就风风火火开始做的我也是醉了。。。。因为没看到n为0的时候结束,,改了好久都不知道错哪里。。。一些题目明明自己做过了却忘了说明没有理解透,慢慢来复习。#include #include using namespace std;#define maxn 101000#define ll long longstruct node{ ll val,pos;}que原创 2015-08-09 15:08:09 · 375 阅读 · 0 评论 -
HDU 5366 【组合数+隔板法】
这道题有DP做法和数学做法。。。数学做法:用隔板法,枚举放入木桩的个数i,然后从n个格子中去掉i个木桩i,由于木桩之间间隔为2,所以再抽取(i-1)个格子,这样用隔板法的时候就没有问题了然后注意组合数。。。用公式C(n,m)=C(n-1,m-1)+C(n-1,m)才可以,若是直接算阶乘会爆的!!(这么简单的都忘了!!)DP做法:用s[i]表示有i个格子的时候摆放的方法数,那么增原创 2015-08-09 19:06:24 · 539 阅读 · 0 评论 -
leetcode 124 【树直径】
class Solution {public: mapdp1,dp2; int ans; void help(TreeNode*x) { dp1[x]=dp2[x]=x->val; if(x->left) { help(x->left); int tmp=dp1[x->原创 2015-06-09 13:55:10 · 564 阅读 · 0 评论 -
POJ 1934 【LCS加强版。。】
其实。。。本来我只是想随便拿一道LCS练练手的。。。。真是练练手啊。。。LCS部分不多说,,说说输出这一部分。要求是所有不重复的LCS且要升序排列。其实并没有做过LCS得还原,所以这一部分还纠结了好久。刚开始暴力搞的,用DFS搜了解,但是这样第一是会有重复的部分(其实暴力的时候也应该去剪枝的),估计剪枝之后 不会有重复的,但是还是要超时。第二就是太慢了。。。然后T了之后就不知道怎么原创 2015-06-01 20:44:08 · 1057 阅读 · 0 评论 -
POJ 3356 【字符串编辑距离】
简单DP。#include #include #include #include using namespace std;#define maxn 1010int dp[maxn][maxn];char a[maxn],b[maxn];int main(){ int n,m; while(scanf("%d %s",&n,a)!=EOF) {scanf原创 2015-06-02 21:19:44 · 387 阅读 · 0 评论 -
POJ 3903 【最长递增子序列 NLOGN】
由于数据大,常规做法会T。然后NLOGN的方法小小get了一下。我觉得这种做法如果只是想知道怎么做的话,看代码比看字来的容易懂,但是当然想要知道原理的话还是要去看字呀。然后自己偷懒并没有去把原理看懂。#include #include using namespace std;#define maxn 100010int que[maxn];int top;void upda原创 2015-06-01 21:58:26 · 495 阅读 · 0 评论 -
HDU 5230
DP要么自己想出来,要么看着别人的思路想出来,最好不要看着代码去理逻辑。毕竟是数学。题解讲的挺清楚的。。。。。dp[i][j]表示数i被分成j个不相同的部分。那么:dp[i+j][j]+=dp[i][j]dp[i+j+1][j+1]+=dp[i][j]可以发现j+1仅和j有关,可以用滚动数组。可以发现,要把每个数拆成j个part的结果先算出来才能算下一个part的。#i原创 2015-05-27 09:15:01 · 467 阅读 · 0 评论 -
POJ 2411 【基础状压DP】
给出的行列范围小,所以考虑状压。用0表示向下摆(摆到这一行的时候这个位置是空的),1表示这里有东西,可能是上一行放上来的,也可能是横着摆放的。考虑怎么进行状态转移。对于当前状态,枚举所有的状态,找到符合条件的之前的状态。什么是之前的状态呢,如果当前行,某个位置出现0,那么上一行这个位置就绝对不能是0,如果某个位置是1,那么上一行是0或者1都可以。所以如果now|pre结果都是1111..那么就原创 2015-09-02 16:33:22 · 455 阅读 · 0 评论 -
HDU 3182【状压DP--easy】
挺简单的。。然而还是想了一会。。。感觉自己脑袋还不是很清醒。。TAT。。。自己脑袋里老是有些奇奇怪怪的小细节。。TAT#include #include #include using namespace std;#define maxn 40000class node{public: int cost,sum;}dp[maxn];class nodee{publi原创 2015-09-02 20:47:44 · 345 阅读 · 0 评论 -
【简单DP】POJ 1050 最大子矩阵
如果暴力做,要枚举每个子矩阵的一条对角线上的两个点,几乎有n^2 * n^2的复杂度。如果把行数变为1,那就是最大子段和的问题,所以当把几行都加起来成一行,再求最大子段和,就可以知道这几行内的最优解……#include #include using namespace std;#define maxn 110int a[maxn][maxn],tmp[maxn],n;int max(原创 2016-08-05 10:54:50 · 341 阅读 · 0 评论 -
【水DP 回文子序列】POJ 3280
周日做腾讯笔试。。最后一题是最长回文子序列。。。(●°u°●) 」由于太久没做这样的题了。。第一题蛇形数组坑了我好久。。然而原因居然是控制前进方向的数组写错了。。TAT然后最后一题就剩下十几分钟。。于是我一看到“回文”,“序列”。。就开始写回文子串。。写完剩2分钟再看一眼题目就发现悲剧了。。(((o(*゚▽゚*)o)))。。。。以前自己刷题也犯这种错误。。但是并不在意。。。到笔试的时候就坑爽原创 2016-04-05 14:15:54 · 332 阅读 · 0 评论 -
关于字符串是否是给定的乔姆斯基范式生成【DP+乔姆斯基范式理解。。。】
之前对乔姆斯基范式不大了解。。(对的。。考试也没考好。。)。乔姆斯基范式中,每个转移后的状态都只有两个大写字母或者一个小写字母。。。#include #include #include using namespace std;#define maxn 110class node{ public: int x,y;}mmap[26][maxn];int ans[26原创 2015-12-02 15:07:47 · 834 阅读 · 0 评论 -
HDU 5501 【贪心+背包】
首先想到的是背包,但是只是纯背包的话,会发现,每个物品取的顺序是会影响结果的(就对案例而言,我如果先取了第一个,再取第二个,就会与最优结果失之交臂)。所以就要考虑,什么顺序取舍最好。然后这个问题就按白书上那样套套公式啦。。发现是Xc/Xb 越小,优先级越高。所以先读入,排序,在背包#include #include #include #include using namespace s原创 2015-10-11 12:39:48 · 421 阅读 · 0 评论 -
HDU 1243 【基础DP 】
这道题怎么会没做过呢。。。我觉得我绝逼是见过这道题的了,,最长公共子序列的简单变形。#include #include #include using namespace std;#define maxn 100010int a[550];int dp[2][maxn];int main(){ int n; while(cin>>n) { memset(dp,0,siz原创 2015-09-12 22:17:24 · 375 阅读 · 0 评论 -
HDU 1159 【基础DP 最长公共子序列】
TAT,,,觉得自己不算太理解,但是居然可以凭着记忆做出来。。蛮拼的#include #include #include #include using namespace std;#define maxn 100100int dp[2][maxn];int main(){ string a,b; while(cin>>a>>b) { memset(dp,0,sizeo原创 2015-09-12 22:04:38 · 426 阅读 · 0 评论 -
HDU 3001 【三进制状压DP】
= =。。。我果真是数学弱渣。。。普通状压,但是由于可以走两回所以变成了三进制的。。然后注意三进制的处理方法。。关于状压的循环顺序,如果是那种给你格子的,就是一行一行遍历的,每一行都遍历所有可能符合情况的数,通常是用滚动数组加上部分维度或者是变量进行限制条件的记录。如果是需要顺序的,只要求最后遍历完的,就是在1#include #include #include using na原创 2015-09-04 17:48:43 · 490 阅读 · 0 评论 -
HDU 1565【状压DP】
今天脑袋不清楚了一天。。。TAT。。。这种题还调了那么久。。TAT。。。之前有想过用贪心,因为每个数都是非负数,那么自然是每行拿的越多越好,就尝试0101或者1010这样的序列就好了,但是可能出现这种情况,上一行拿了0101的序列,这一行拿1010,有可能下一行1010的取值配上上一行0101的取值是最大的情况,或者是这一行01001更佳,所以还是要用状压DP。。之前忘了初始化。。醉了。。原创 2015-09-03 23:14:53 · 497 阅读 · 0 评论 -
HDU 4568【最短路+状压DP】
应该算是比较裸的最短路和状压DP。。。感觉之前看到的题都是DP。。因为想的问题都一样。有一点,由于状态在转移的时候,是由哪一个点转移过来的很重要,所以并不能通过取最小值来决定从哪一个点转移来,所以每个点产生的情况都要记录。在这里错了好久。。。恩。。这样说来应该还是蛮简单的。。。。#include #include #include #include using namespac原创 2015-09-03 16:56:48 · 429 阅读 · 0 评论 -
HDU 2294【DP+快速幂】
睡眠是个好东西。。=w=。。今天上午困困的。。明明已经发现怎么做了,结果建立矩阵的时候脑子一直是糊里糊涂的。。。。睡了一觉,起来改改就过了。。。=w=~~之前知道是DP+快速幂了,但是之前看的时候没有头绪。看第一眼也觉得是组合数,但是自己先草算几个例子就会发现是DP,用dp[i][j]表示目前的长度为i,用了j种颜色,那么可以由i-1的长度有j-1中颜色在剩下的k-j+1中颜色中挑一种原创 2015-09-09 14:46:43 · 444 阅读 · 0 评论 -
POJ 1925 【水】
这道题自己是水过的,,,交完之后看了网上的代码是DP,,我。。。时间还算不错,跑了400MS。题意:蜘蛛侠从初始的塔开始,利用一栋栋楼做圆周摆,到达最后的塔楼。并且每次摆长不能大于楼高。题解:首先,每次的圆周摆要完成之后才可以进行下一次的移动,所以每次的圆周摆,始末位置是关于塔楼对称的。根据楼高可以算出能进行圆周摆的范围,然后就枚举。。我在讲什么啊去QAQ。。。#include原创 2015-04-25 10:32:39 · 509 阅读 · 0 评论 -
HDU 1231 DP
好久没做题了,望我能跨过这道坎。DP其实自己原先做了好久还是跟没入门一样……有点不得其法……到底是哪方面能力差……好啦,说说想法。是看了题解还是不懂的……之前脑子里一直模拟程序是怎么走的,但是真不知道为什么这样,然后刚刚……换了一种方式……我也不知道这样靠谱不……反正……看着像对的?不对的话也是我证明的方面还不够吧。设dp[i]为以a[i]结尾的最大子序列和。证明:dp[i原创 2015-03-13 16:59:18 · 422 阅读 · 0 评论 -
HDU 1003 DP
和1231几乎一样嘛…… 就是处理位置的时候改个等号然后PE的我心塞塞,总算是找对姿势了。#include #define ll long long#define maxn 100010int a[maxn];typedef struct node{ ll sum; int l,r;}node;node ans[2];int main(){ int原创 2015-03-15 13:06:40 · 363 阅读 · 0 评论 -
HDU 3127
二维背包进阶版。。。。。把b原创 2014-08-28 11:14:20 · 606 阅读 · 0 评论 -
HDU 2159
第二道二维背包,1A,虽然简单,但是每次1A都很开心~~~~~原创 2014-08-27 21:34:09 · 542 阅读 · 0 评论 -
HDU 3496
你妹啊。。。。。。。到最后直接都在对拍了还WA了好久,mao原创 2014-08-27 20:49:56 · 684 阅读 · 0 评论 -
HDU 1171
1A。看到直接A掉了还是很激动的呀啊啊。今天下午的目标就是进阶wan原创 2014-08-27 13:45:44 · 568 阅读 · 0 评论 -
HDU 1203
又是一道背包题,模式完全一样的,就是稍微注意下格式,然后memset不能对double型的进行初始化原创 2014-08-27 12:34:00 · 563 阅读 · 0 评论 -
HDU 2602
DP,基础简单背包问题。。。然后转移方程没错不知道wa在哪里。。。今晚吃齁了不想查原创 2014-08-26 20:45:25 · 542 阅读 · 0 评论 -
DP模型状态转移方程(mark一下,有天我也要自己总结)
1(最长公共子串(注意和最长公共子序列区别))两个字符串str1和str2,长度分别为(l1,l2)dp[i][j]表示以两个字符串分别以第i和第j个字符结尾所能达到的公共子序列的长度,由于下面涉及到i-1和j-1,那么这个时候我们一般从i=1和j=1开始到i<=len1, j。 if(str[i-1]=str[j-1]) dp[i][j]=转载 2014-08-14 19:33:37 · 1016 阅读 · 0 评论 -
HDU 4976
wa掉了掉了。。。。原创 2014-08-22 21:56:06 · 937 阅读 · 0 评论 -
HDU 1003 最大子序列
mark一下,这道题跑到46ms的时候,原创 2014-08-03 09:06:23 · 646 阅读 · 0 评论 -
HDU 1058 DP
自己做的时候没想法。。。。好渣啊好渣怎么办!。。。。原创 2014-08-09 11:06:22 · 544 阅读 · 0 评论 -
HDU 1069
DP。虽然说是很简单,但是花了我好多时间。。。。由于之前做DP的时候偷懒,省略了很多si原创 2014-08-15 14:05:37 · 635 阅读 · 0 评论 -
POJ 3254 状态压缩
今天撸了一天的状态压缩DP。。。。原创 2014-08-29 20:45:38 · 579 阅读 · 0 评论 -
HDU 2089【数位DP】
和49那题是一样的,就是判断的时候会原创 2014-10-08 21:17:56 · 573 阅读 · 0 评论 -
hdu 3555【数位DP】
数位DP。。。。。第一道数位DP,,但是感觉自己还弄得不是很qin原创 2014-10-08 20:30:07 · 704 阅读 · 0 评论