![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM
文章平均质量分 69
煎饼果子来一套
这个作者很懒,什么都没留下…
展开
-
CF/257/B/图论
题意描述:原创 2014-07-21 01:48:28 · 922 阅读 · 0 评论 -
zoj 3644(关于最小公倍数的DP)
这个题目必须得记录一下,经典。dp【i】【j】 i表示现在在哪个点,j表示现在是第几个约数,记忆化搜索即可,做了一些题之后,发现这是个经典的设置状态方法。#include#include#include#include#define MOD 1000000007#define Max(a,b) ((a)>(b)?(a):(b))#define Min(a,b) ((a)<(b)原创 2012-10-16 21:18:00 · 778 阅读 · 0 评论 -
DFS 下沙小面的(2)
搜索真的理论上能解决所有问题,特别是对于数据量小的题目,继续练习,为DP做准备#include#include#include#define Max 9int adj[35][35];int stop[Max],moved[Max],min,n,k;int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b>0?原创 2012-05-24 02:30:50 · 777 阅读 · 0 评论 -
双塔DP---- 一类以差值为状态表示的DP
从AOJ的塔,到POJ的ferry loading,ferry loading到浙江省赛的第7题Process the Tasks,发现这三个问题都是一类比较典型的dp,有必要好好总结一下,避免以后再出现就不会了这类题目比较原始的版本是AOJ的塔问题(题目链接)题意:给你一堆积木,选择其中的某些来组成两个相同高度的塔(对于某块积木,可以放在塔1,可以放在塔2,也可以都不放),问你最大组原创 2012-09-04 21:44:58 · 1871 阅读 · 0 评论 -
记忆化搜索,poj1088
flag【i】【j】表示以现在这个位置为起点的最远能走的长度,熟悉下递归,这个题应该不难,记忆化#include#include#define Max 105#define Maxhigh 10005typedef struct { int x,y;}position;position move[4]={-1,0,0,1,1,0,0,-1};int fla原创 2012-05-22 22:58:06 · 1249 阅读 · 0 评论 -
CF 176B - Word Cut (dp计数)
CF的每道DP题目都能让我回味良久,太经典了!!!!!!!!题意:给两个字符串A,B,每次操作能把A分为两部分C,D,组成DC,比如A是abcdefg,abc | defg ----->defg | abc,然后指定操作次数K,问在K步之内将A转化为B的方法数。链接:http://codeforces.com/problemset/problem/176/B解析:先暴力求出循环原创 2012-10-07 20:56:59 · 910 阅读 · 0 评论 -
HDU 3045 Picnic Cows(斜率优化DP)
这是个很明显的DP题目,排序之后容易想到DP方程为dp【i】 = dp【j】 + w【j + 1,i】然而4*10^5次方明显TLE,必须得优化,因为是一维的状态表示,所以四边形优化应该不可行(个人做题太少了,没见过一维的四边形优化)另外w函数和j有关,所以单调队列不可行了,只能往斜率优化想了,斜率优化证明还算容易吧,证出来之后就相当于模板了#include#incl原创 2012-10-07 12:52:41 · 1177 阅读 · 0 评论 -
cf 127 div .1 Fragile Bridges(dp 好题)
这个题目有必要标记下,和hdu的最大矩形面积一样,分为两类DP,最后枚举求解链接:http://www.cppblog.com/hanfei19910905/archive/2012/06/30/180831.aspx题意:有N个点,点与点之间存在通过次数被限定的桥,每通过一次桥,能获得一分,问你最多能获得多少分(起点自己决定)解析:从左边DP一次起,右边DP一次,dpl【i】【0】从原创 2012-10-06 11:44:53 · 812 阅读 · 0 评论 -
HDU 4274 spy work (树形DP)
相对水的一道树形DP,把父子关系想清楚了就容易多了题意:给出一部分节点的信息,问你这部分信息有没有冲突。大致题意。详细自己看。解题思路:我的想法是给通过两个数组表示各个节点的上下限,如果上限小于下限,那么这是冲突的,上限==下限,表明这点的工资是确定的。 先输入各种关系,然后一遍DFS即可。我们得明白一件事,儿子只能够修改父亲的下限,不能修改父亲原创 2012-09-11 10:32:35 · 783 阅读 · 0 评论 -
ZOJ 3471 状态压缩DP
比较明显的DP,由于数据比较小(maxn==10)所以状态压缩dp直接搞#include#include#includeusing namespace std; const int maxn=1025;int dp[maxn],pow[12][12],bit_mask[15];//0表示存活,1表示死亡int main(){ int n,i,j,k,newi,ans; b原创 2012-08-28 16:58:31 · 792 阅读 · 0 评论 -
个人DP训练(基础版)
题目链接 hdu 2955 Robberies01背包,转化为求被抓的概率。 题目链接 hdu 1864 最大报销额 01背包,每张发票的总额为容量和价值,注意预处理数据,对于浮点数,向大牛cxlove学了处理(%d.%d)接收小数 题目链接 hdu 1506 Largest Rectangle in a Histogram原创 2012-08-24 16:37:53 · 1871 阅读 · 0 评论 -
poj 2609 动态规划
DP,注意单组输入,题目的进程无后效性,适合DP,由于当时没有估计出车子数量,用了滚动数组。现在来谈下DP状态的表示,比较容易想到的是DP【i】【j】【k】(现在的车子编号,队列1长度,队列2长度)明显MLE,其实我们只需要有前两维即可,因为最后一维可以从前面两维推知:k=sum【i】-j;问题转为存在性问题了,dp【i】【j】=dp【i-1】【j】|dp【i-1】【j-len原创 2012-08-27 00:13:32 · 1056 阅读 · 0 评论 -
hdu 1506 dp思想的应用
我们要求最大矩形面积,那么我们应该求每个矩形向两边延伸的最大长度,最坏情况为0(n),必然TLE,那么我们可以应该DP的思想,用一个数组来保存一些结果。例如,dpl【i】表示从左边过来的最长,那么我们计算dpl【i】的时候,如果左边的比自己高,那么dpl【i】=dpl【i-1】,但是可能在前面还有更多符合情况的(比i-1低但是比i高),所以我们要用i-1-dp【i-1】,继续寻找,详情看代码原创 2012-08-24 20:36:11 · 1913 阅读 · 0 评论 -
注意64位数
Flying to the MarsTime Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5486 Accepted Submission(s): 1809Problem DescriptionIn原创 2012-04-29 17:33:22 · 950 阅读 · 0 评论 -
hdu
模版题。。。。注意只统计总类#include#include#include#include#include#define val 10005using namespace std;struct Dictree{ int cnt; int no; Dictree *next[100],*fail;}*root;vector hack;queue q;int n,原创 2012-08-22 09:54:01 · 487 阅读 · 0 评论 -
HDU 2222 AC自动机模版
弄个模版也能花一天。。。。太佩服我自己了。。。。root的初始化都没弄好。。#include#include#include#include#define val 10005using namespace std;struct Dictree{ int cnt; Dictree *fail,*next[26];}*root;queue q;int n,ans;char原创 2012-08-22 01:10:25 · 715 阅读 · 0 评论 -
HDU 4433 类似于状态压缩的DP
这题卡了好几个小时,纠结,后来回想一下,其实是自己模型构建能力太弱了,想清楚的话就容易多了dp[i][j] 表示位置i,j表示i,i + 1,i + 2位置上的值,dp【i】【j】确保1-----i - 1 的位置已经一一对应,然后转移的时候就分为上和下,上的话,注意一下,第一位上升A,第二位可以上升B(B 下的话,同理,转移的话,自己看下代码,应该蛮好理解的#i原创 2012-10-28 17:26:48 · 873 阅读 · 0 评论 -
POJ 1935 树形DP
比较好的一道树形DP,与POJ 2486 对比可以加深对树形DP的理解。题意:给你一棵树和它的根节点,然后给出一些需要遍历的点,问你遍历这些点至少需要多少时间。解析:dp【i】【0】表示从i节点出发遍历需要的点然后回到i节点,dp【i】【1】则表示不回来,状态想出来了,但是转移的时候并不像之前所做的树形DP一样,要求对于每个子节点都转移(因为有些子树中并没有要求遍历的点),这个怎么处理呢?原创 2012-10-31 11:41:48 · 743 阅读 · 0 评论 -
zoj 3614 二维RMQ
链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4738题意:给你一个 n * m 的矩阵,然后有Q次询问,求一个a * b 的 子矩阵,使其方差最小(去掉子矩阵的最大值以后)分析:n 和 m 的范围是 0 - 300,q 最大为100,枚举的话是10 ^ 6,这就要求我们在O(1) - O(n^2) 内求出子矩原创 2012-10-23 20:27:59 · 781 阅读 · 0 评论 -
codeforces251/D/线段树
线段树对区间取模。考试前就想写的题目QAQ,cxlove点了一下之后知道是什么回事了,先说下做法,暴力更新就行了,维护区间的最大值,每次把要取模的区间的最大值取出来,暴力更新,由于取模的性质可以保证每次取模之后至少比原数的一半还少,所以整体复杂度还是比较低的。现在简单证明下a%b 首先我们先设b = ka , k属于(0,1]1.若k 2.若k > 0.5,原创 2014-07-04 11:12:07 · 1278 阅读 · 0 评论 -
BZOJ 1588 朴素TREAP,寻找前驱和后继
不得不吐槽比较坑的数据。。寻找前驱和后继,取差值较小即可#include #include #include #include #include #include #define LL int #define inf 2000000000;#pragma warning(disable:4996)#define _CRT_SECURE_NO_WARNINGSusing原创 2014-03-13 01:23:41 · 2457 阅读 · 0 评论 -
可合并的TREAP
艰难地A了这个题目。。。还是代码能力太弱了。主要思想:位置可以变换。。但是某个位置对应的内存地址是不会变的,沿着某个节点的父亲往上暴力统计就能知道他现在在什么位置了,注意先pushDown#include #include #include #include #include #include #pragma warning(disable:4996)#define _CRT_原创 2014-03-12 23:17:31 · 1499 阅读 · 0 评论 -
专注做好一件事
作者: JACK ALTMAN 来源: 36氪 英文原文:Your best option is to be the best“人们对机会的估值过高,这是我在下棋的时候学到的一点。你其实只需要一个好的选择就行,没必要同时去追求 A、B、C、D。”——Peter Thiel 是让你的选择尽可能开放,还是全心全意抓住一个选择,专心做好一件事情——可以说转载 2013-08-14 20:59:43 · 1152 阅读 · 2 评论 -
HDU 4125 NlogN查找二叉树的生成
题意:题目给定一颗二叉树,前序遍历二叉树的时候产生一个01的欧拉序列,输出某个01串在此序列中出现了几次。总结:真是弱。。。。我居然模拟查找二叉树的生成,这可能退化到N^2。。。,引用了一个结论:http://www.cppblog.com/hanfei19910905/archive/2012/07/02/181144.htmlnlogn的算法生成静态二叉树,mark一下:原创 2013-08-24 19:22:39 · 1175 阅读 · 0 评论 -
POJ 3261 字符串
题意:给定一个字符串,求最少出现K次的最长重复字串,这K个字串可以重叠。做法:1.hash(二分最大长度,这里要判断的是枚举起点,然后对该长度的字串求hash值,统计下该字串出现了几次,如果>=k,则满足条件) 2.后缀数组(论文经典题,详细看论文)code:1.#include #include #include #include #includ原创 2013-07-22 10:01:42 · 802 阅读 · 0 评论 -
ubuntu安装sublime 的配置
下载C++环境:sudo apt-get install build-essential配置代码:{ "cmd":["g++","${file}","-o","${file_path}/${file_base_name}"], "file_regex":"^(..[^:]*):([0-9]+):?([0-9]+)?:?(.*)$", "working_dir原创 2013-07-05 13:44:05 · 1907 阅读 · 1 评论 -
HDU 1150 二分图匹配 最小点覆盖
题意:有一序列的工作需要完成,现在有两台机器A,B,机器A有N个模式,机器B有M个,每个工作可以在机器A上的a模式下完成,或者在机器B的b模式下完成,机器变换模式时需要重启机器,问你最少的重启机器次数思路:这个题目可以将两个机器的模式看做二分图,对于某一个工作的两个机器的模式连线,然后求二分图的最小点覆盖(用最少的点使所有的边至少与某个点相连 (最小点覆盖) == 二分图的最大匹配),注原创 2013-01-07 10:21:56 · 814 阅读 · 0 评论 -
HDU 3639 强连通缩点优化
题意:有一群孩子正在玩老鹰抓小鸡,由于想当老鹰的人不少,孩子们通过投票的方式产生,但是投票有这么一条规则:投票具有传递性,A支持B,B支持C,那么C获得2票(A.B共两票),然后问你获得最多票数的人是谁,最多能获得的票数是多少张思路:原始思路是对每个点跑一次DFS,然后统计,但是由于case比较多,必然超时,所以我们得优化一下,这个题目可以转化为有X个点以自己为根,包含了I,输出最大的X以及相原创 2013-01-04 21:37:24 · 1167 阅读 · 0 评论 -
HDU 4009 最小树形图
题意:有一个村庄需要给每户人家提供水,有两个方法:1.自己凿井 2.从有井的人家引过来,不同的方式有不同的花费,问你解决每户人家供水问题的最小花费。思路:构建一个超级源点,丛源点引一条边到每个点(花费为 home.z * X)),可以引水的两个人家间构建一条边,然后对超级源点跑一次最小树形图即可(引用HH大牛的模板)。总结:这个题目如果不是看了最小树形图的专题的话,目测我是没有能力做原创 2012-12-26 19:55:44 · 1219 阅读 · 0 评论 -
【转】让人深思的退役贴
3xian退役贴---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------最后一天,漫天飘起了雪转载 2012-11-06 20:58:23 · 1816 阅读 · 1 评论 -
HDU 3646 DP + 二分
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3646题意:你有N把武器,每把武器可以对敌人造成一定的伤害(et:攻击力500,敌人血量为200,杀死敌人,攻击力剩余300),一共有K个敌人,你有M次魔法double武器的攻击力(加倍),使用武器是有规则的:武器有两个状态,一个状态为young,一个为old,新的武器状态为young,当你用它杀死一个原创 2012-10-26 11:10:16 · 752 阅读 · 0 评论 -
树形DP题集
更新。HDU 4340 Capturing a countryHDU 3586 Information Disturbing原创 2012-10-25 09:00:57 · 551 阅读 · 0 评论 -
HDU 4295 状态压缩dp + KMP
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4295题意:给你一个字符串和他的4个子串,将这4个子串放到原串里面(可以重叠),问你最多能覆盖多少个字符,最少能覆盖多少个字符解析:网赛的时候DP还是太水了,居然不敢想这个题目,现在看下,其实这个题目还是不难的,只是不好写,用KMP预处理子串可以插入的位置,dp【i】【j】【k】表示位置i,4个字符原创 2012-11-02 19:22:30 · 888 阅读 · 0 评论 -
hdu 2577 how totype 记忆化递归
看了递推的题解,感觉递归在这个时候有不少优势了,虽然时间的差距还是有点思路:对于每次搜索到某个位置的时候,可能有两个状态,大写开,大写关,记录下到达某个位置的两个状态的最优解。注意大写开的,最后还得+1,把它关了。#include#includeint visited[105][3];char s[105];int dfs(int ,int );int sl;int m原创 2012-06-21 15:48:55 · 660 阅读 · 0 评论 -
POJ 3630 静态字典树
题意:给你一些电话号码,问你是否有一个电话号码是其他电话号码前缀比如,911 和911584这两个号码,911是911584的前缀解题思路:经过pork大神的指导,估计时间如下,一共有10000个电话号码插入,每个号码最长10位,如果每次插入最差就是开辟10个新的节点,那就是10000*10*10个,一百W,如果有new开辟的话,时间耗费严重,超时是必然的,那么用静态数组,提前开辟100W原创 2012-08-20 09:48:58 · 1461 阅读 · 0 评论 -
记忆化搜索 HDU 1158
效率很低,本来半个小时可以搞定的题目,结果花了2个多小时DP不会,继续记忆化搜索,虽然效率和递推的DP差了8倍,但是思路应该不会差距太大吧?#include#includeint visited[12][100005];int month,hire,fire,salary,need[13];int dfs(int ,int );int main(){ int i,lowest原创 2012-06-20 01:45:23 · 838 阅读 · 0 评论 -
原始版N皇后问题,最慢的算法
#include#includeint c[15],sum,n;int map[15][15];void dfs(int );int main(){ while(scanf("%d",&n)&&n) { sum=0; memset(c,0,sizeof(c)); dfs(0); printf("%d\n",原创 2012-05-27 10:36:59 · 501 阅读 · 0 评论 -
WOJ
继续用DFS+记忆化剪枝来解决一般的dpDescriptionAlex likes solving problems on WOJ (http://acm.whu.edu.cn/oak). As we all know, a beautiful balloon will appears when a problem is solved. Alex loves balloon原创 2012-06-12 18:14:46 · 4930 阅读 · 0 评论 -
Treats for the Cows 记忆化搜索
#include#includeint hash[2005][2005];int treat[2005];int num;int dfs(int head,int tail,int n);int main(){ int i,k; while(scanf("%d",&num)!=EOF) { memset(hash,0,sizeof(hash))原创 2012-06-09 23:49:26 · 1290 阅读 · 0 评论 -
记忆化搜索 HDU1501
自己想不到啊,原来记忆化也可以当做是剪枝的一部分,有个小发现,用bool类型判断比0 1判断效率高点#include#include#define Max 205bool memory[Max][Max];char str1[Max],str2[Max],str3[500];bool found;void dfs(int atemp,int btemp,int ptem转载 2012-05-21 22:44:13 · 627 阅读 · 0 评论