动态规划
文章平均质量分 66
nlj1999
这个作者很懒,什么都没留下…
展开
-
BZOJ 4563: [Haoi2016]放棋子
考虑经典的二分图做法,然后就变成求二分图完美匹配的个数了显然不会做QAQ由于障碍的特殊性,不妨把每个障碍都放到主对角线上,发现对答案没有影响于是就变成错排计数了高精度搞一搞就好了#include#include#include#include#include#include#include#include#include#define rep(i,l,r) f原创 2016-05-22 18:27:20 · 683 阅读 · 0 评论 -
BZOJ 1205: [HNOI2005]星际贸易
这道题要枚举做法QAQ首先一看题目,乱七八糟一大堆费用利润什么的,不是DP就是最短路网络流。网络流看起来好像会炸,而且模型很麻烦,弃疗。发现AiDP之后可以建出一个DAG,然后可以找到最大贸易额的方案(然而方案很多岂不是要T)继续读题,发现方案唯一。于是求出方案。问题转化为在一个序列上经过好多点走到终点,符合各项条件的情况下费用最小,其中有某些点必须经过。然后我就傻原创 2016-03-27 21:40:04 · 1021 阅读 · 0 评论 -
BZOJ 4008: [HNOI2015]亚瑟王
发动吧命运之轮~又TM不会做……把每一轮看成一次机会,然后看哪张牌抓住了这次机会(好奇怪的样子)f[i][j]表示考虑完牌i还剩j次机会的概率,假设第i张牌抓住了第j次机会,那么f[i][j]从f[i-1][j+1]处转移过来如果没抓住,那么f[i][j]从f[i-1][j]处转移过来设pow[i][j]=(1-p[i])^j则f[i][j]=f[i-1][j]*pow原创 2016-04-12 17:14:34 · 756 阅读 · 0 评论 -
BZOJ 1200: [HNOI2005]木梳
虐哭了QAQ首先简单分析一下会发现将最终的序列游程编码之后不会出现连续的长度为3的递增或递减数列,然后就弃疗了。于是只好去翻题解……卧槽这贪心是什么鬼。看了半天证明感觉有点方,于是决定把代码敲(抄)一遍就算了。其实我觉得既然复杂度是n*c^2*d^2,不如把c和d设大一点,反正也证不出来。#include#include#includeusing namespace st原创 2016-03-27 15:16:12 · 981 阅读 · 0 评论 -
BZOJ 3139: [Hnoi2013]比赛
这题嘛,我们可以首先考虑枚举一共n*(n-1)/2次比赛的结果,然后判断一下就好了其实有一点是显然的,分数序列的顺序不影响答案所以我们用最小表示法来表示分数序列,然后记忆化搜索一下就好了。#include#include#include#include#includeusing namespace std;typedef long long ll;const int p=原创 2016-04-08 13:20:50 · 529 阅读 · 0 评论 -
BZOJ 1065: [NOI2008]奥运物流
基环内向树上DP。09年-《对一类动态规划问题的研究》#include#include#includeusing namespace std;const int N=60+5;double f[N][N][N],g[N][N][N],FF[N],C[N],K[N];int n,pre[N],m;void dp(int u,int d){ for(int v=2;v<=n;v原创 2016-03-25 15:00:24 · 667 阅读 · 0 评论 -
BZOJ 2037: [Sdoi2008]Sue的小球
区间DP每次决策时计算当前决策对未来的影响#include#include#include#includeusing namespace std;const int N=1000+5;const int inf=1e9;int sum,s[N],f[N][N][2],x[N],n,y[N],st;bool vis[N][N][2];int w(int i,int j){原创 2016-03-25 10:13:17 · 558 阅读 · 0 评论 -
BZOJ 1415: [Noi2005]聪聪和可可
数学期望水题预处理一下再记忆化搜索#include#include#include#includeusing namespace std;const int N=1000+5;const int inf=1e9;struct Edge{int to,next;}e[N<<1];int head[N],cnt;void ins(int u,int v){ e[++cnt]原创 2016-03-25 08:30:59 · 313 阅读 · 0 评论 -
BZOJ 2339: [HNOI2011]卡农
2011完结撒花这题一眼看过去,裸的Lucas定理??????赶紧写了一发,WA了QAQ发现题目竟然还有限制,太无情了所以我们还是先简化一下问题,比如说把组合这个限制去掉,变成排列显然排列的答案求出来后直接除以m!就是组合的答案了然后令f[i]为前i段合法的方案数若i-1段的排列已经确定,有A(i-1,2^n-1)种方案,那么第i段显然只能加一种,但是可以加在不同位置上原创 2016-04-06 19:12:48 · 662 阅读 · 0 评论 -
poj 1085 Triangle War
人生第一道真正意义上的极大极小过程+alphabeta剪枝。其实一开始让我写alphabeta剪枝我是拒绝的,于是我写了个记忆化搜索,TLE了。。。。。。。哦然后优化了一下,300多MS A了但是不爽啊说好的博弈论呢当然要用正解了于是学了下alphabeta剪枝,其实挺简单的,就是alpha为已知max游戏者的下界,beta为min游戏者的上界,如果beta假设在博弈树原创 2016-02-29 11:02:54 · 687 阅读 · 0 评论 -
POJ 3317 Stake Your Claim
有了之前的基础,3进制DP根本不在话下啊,半个小时就搞定了(本来就是水题好不好)极大极小过程+记忆化搜索话说第一次接触博弈论,还有点紧张(紧张个P啊连Alpha-Beta剪枝都没有的水题)然后大概看了下极大极小过程,发现这题根本用不到什么啊TAT顺便吐槽数据好水63MS就过了,竟然rank27,不科学。#include#include#includeusing names原创 2016-02-28 19:19:47 · 508 阅读 · 0 评论 -
POJ 3133 Manhattan Wiring
辣鸡题目,毁我青春,费我时间,害我性命。白书上的题目,轮廓线状压DP真是无爱了。思考半小时,代码两小时TAT,我又回忆起了NOIP上写的那个脑残状压DP了,坑爹的优化。。。。。。不过好歹1A了是不是。这波不亏手算一下有11种转移。都列出来然后就是码码码了。MD有个转移算错了查了半小时,还顺便学了下GDB#include#include#includeusing原创 2016-02-27 12:00:27 · 633 阅读 · 0 评论 -
bzoj 1499: [NOI2005]瑰丽华尔兹
其实这是个论文题我会乱说?我大概是我见过的最简单的NOI题了吧然而并没有用论文里的的方法(虽然是黑科技但是好麻烦啊)这个东西嘛,很明显每次转移都是区域化的。然后单调队列维护乱搞一下代码写得好丑QAQ没治了#include#include#includeusing namespace std;const int inf=1e9;int f[2][205][205],原创 2016-03-11 21:11:59 · 446 阅读 · 0 评论 -
SPOJ 699 HKNAP - Huge Knap Sack
部分贪心解决大背包问题先利用数据特殊性将物品压缩成18个,第i个体积是i,重量为w[i],这里w[i]取体积为i的原物品的最大值。然后找到性价比最大的wi,vi。考虑任意一个物品p,若取q个该物品且q>=vi,即q=vi+x(x>=0),则总重量为w[p]*(vi+x)w[p]*(vi+x)=w[p]*vi+w[p]*x所以取limit=vi*18,即每个物品都取18个,则容量原创 2016-03-23 11:04:36 · 453 阅读 · 0 评论 -
BZOJ 4011: [HNOI2015]落忆枫音
第一眼看是语文题?读了一段感觉不对劲啊这不符合出题人的语文水平百度了一下,WTF??????不愧是老司机啊,省选都能开车,太厉害了好了看题目,有向图生成树计数?显然基尔霍夫矩阵在有向图上的应用我并不会不过原图是个DAG我们考虑一下朱-刘算法的第一步,给除根外每个点选个入边显然DAG上会构成一棵有根树,于是答案就是除根节点外其他节点的入度的乘积啦但是万恶的出题人显原创 2016-04-13 10:05:57 · 479 阅读 · 0 评论 -
BZOJ 1210: [HNOI2004]邮递员
写了两个小时。。。。。。。。毒瘤三件套:插头DP,哈希判重,高精度学(抄)到了插头DP的书写艺术#include#include#include#includeusing namespace std;const int base=1e9;const int maxhash=2601;int get(int s,int x){return (s>>((x-1)<<1))&3原创 2016-03-28 15:42:44 · 1008 阅读 · 0 评论 -
BZOJ 4562: [Haoi2016]食物链
JL的题好神,各种不会做然后谁能告诉我NOIP题怎么又出到省选来了#include#include#include#include#include#include#include#include#include#define rep(i,l,r) for(int i=l;i<=r;i++)#define per(i,r,l) for(int i=r;i>=l;i--)原创 2016-05-22 18:06:40 · 499 阅读 · 0 评论 -
BZOJ 4557: [JLoi2016]侦察守卫
做法同 HDU 5290#include#include#include#include#include#include#include#include#include#define rep(i,l,r) for(int i=l;i<=r;i++)#define per(i,r,l) for(int i=r;i>=l;i--)#define mmt(a,v) memset原创 2016-05-22 10:17:30 · 895 阅读 · 0 评论 -
BZOJ 4521: [Cqoi2016]手机号码
比较好搞(暴力)的数位DPf[pos][a][b][c1][c2][c3][flag]表示目前决策第pos位,a是pos+2位,b是pos+1位,c1表示是否有3个连续的,c2表示是否有4,c3表示是否有8,flag表示这一位能不能取比原数大的#include#include#include#include#include#include#include#include原创 2016-05-20 09:19:23 · 295 阅读 · 0 评论 -
BZOJ 4518: [Sdoi2016]征途
裸的斜率优化DP(似乎并没有精度问题啊)#include#include#include#include#include#include#include#include#define rep(i,l,r) for(int i=l;i<=r;i++)#define per(i,r,l) for(int i=r;i>=l;i--)#define mmt(a,v) memse原创 2016-05-19 11:23:08 · 306 阅读 · 0 评论 -
HDU 2820 Permutaion
题目拼错系列我™要是再写这种题我就是狗!!!!!md调了一天真是智障首先问题分析一下转化为求哈密尔顿路的个数基于连通性的状态压缩DP,基于连通性……但是不能用括号序列表示,所以要用最小表示法所以大概就是和NOI07的生成树计数差不多吧(我那题代码也写得很挫)然后大概就是每个点4位,前两位表示所在连通块的标号,后两位表示度数然后瞎JB搞一下就好了md连通块合并完了原创 2016-04-21 20:31:54 · 568 阅读 · 0 评论 -
COGS 1834. [国家集训队2011]采矿
人类互相伤害的典型题目首先显然两个分组背包是可以合并的所以我们可以用线段树维护一段区间的背包解于是就变成了树剖了#include#include#include#includeusing namespace std;#define rep(i,l,r) for(int i=l;i<=r;i++)#define per(i,r,l) for(int i=r;i>=l;i-原创 2016-04-30 08:13:20 · 368 阅读 · 0 评论 -
BZOJ 2657: [Zjoi2012]旅游(journey)
三角剖分转对偶图之后形成了树,问题转化为求树上最长链证明见14年论文#include#include#include#include#include#define rep(i,l,r) for(int i=l;i<=r;i++)#define per(i,r,l) for(int i=r;i>=l;i--)#define mmt(a,v) memset(a,v,sizeof(原创 2016-05-11 17:45:16 · 389 阅读 · 0 评论 -
BZOJ 1042: [HAOI2008]硬币购物
做点弱智题压压惊先假设没有限制,完全背包搞一搞容斥一下,枚举每种是不是超过了限制,超过的就把S减掉也就是说每一种情况的方案数是f[s-Σex[i]*c[i]*d[i]]#include#include#include#include#define rep(i,l,r) for(int i=l;i<=r;i++)#define per(i,r,l) for(int i=r;原创 2016-05-11 16:47:27 · 520 阅读 · 0 评论 -
APIO2015 UOJ 110-112
#110. 【APIO2015】Bali Sculptures很像NOI2014的起床困难综合征首先每一位拆开来做从高位到低位贪心,看每一位能不能为0NN#include#include#include#includeusing namespace std;const int inf=1e9;#define rep(i,l,r) for(int i=l;i<=r原创 2016-04-27 19:37:45 · 671 阅读 · 0 评论 -
BZOJ 3573: [Hnoi2014]米特运输
真正的神题是把OI题出成语文题!首先我们利用文言文翻译的基本技巧(那是啥)翻译一遍题目然后就会发现其实就是使得每个点的权值都是父节点权值/父节点的度数再搞一搞会发现一个点的权值确定了,每个点的权值都确定了然后根据每个点的权值算出当该点为原值时根节点的权值排序一下找出现次数最多的那个就可以了由于权值可能很大,取个对数#include#include#include#原创 2016-04-11 12:51:15 · 434 阅读 · 0 评论 -
BZOJ 3572: [Hnoi2014]世界树
好久没有做虚树了,感觉好虚啊首先建出虚树,然后对于两边dp搞出虚树上每个点连接到的居委会对于虚树上的每条边,我们找到两端点的分界点,再对他们连接到的居委会更新答案这里给树剖加个特技就能求两点间第K个点了#include#include#include#includeusing namespace std;const int N=300000+5;const int in原创 2016-04-11 11:42:04 · 344 阅读 · 0 评论 -
APIO2014 UOJ 103-105
#103. 【APIO2014】Palindromes回文树裸题利用lazy思想延迟标记,最后所有标记倒序更新即可#include#include#includeusing namespace std;#define rep(i,l,r) for(int i=l;i<=r;i++)#define per(i,r,l) for(int i=r;i>=l;i--)typedef原创 2016-04-27 10:35:04 · 545 阅读 · 0 评论 -
BZOJ 4013: [HNOI2015]实验比较
HNOI的最后一题啦(我才不知道为什么HNOI2015只有5道题呢)注意题目中的一个条件:对每张图片 i,小 D 都最多只记住了某一张质量不比 i 差的另一张图片 Ki。把小于关系看成有向边,那么这句话的意思就是每个点最多一条入边把等于关系的点合并一下,那么原图就是基环外向森林了有环的情况肯定不合法所以合法的情况必定是森林,我们可以设置一个虚拟节点把森林里的树都连起来,就变成树原创 2016-04-14 09:05:44 · 373 阅读 · 0 评论 -
BZOJ 3672: [Noi2014]购票
近年来的趋势都是把动态规划出成计算几何吗?这题首先我们有个n^2的动规设v为u的祖先f[u]=min{f[v]+(d[u]-d[v])*p[u]+q[u]}且d[u]-d[v]~~~~~我要变形了~~~~~~f[u]=min{-d[v]*p[u]+f[v]}+d[u]*p[u]+q[u]哎,前面这个好像什么东西啊y=kx+b于是我们发现u的祖先是好多线假设p[u]为原创 2016-04-04 20:28:25 · 700 阅读 · 0 评论 -
POJ 2754 Similarity of necklaces 2
论中午不睡觉的危害TAT蒟蒻什么都没学过表示很新奇系列——原来多重背包真的可以用单调队列做。显然多重背包有n*V*sigma(k)的做法,但是这里的sigma(k)显然是多余了,当对每一个物品更新的时候,我们将当前容量对物品的体积v取模,根据剩余进行分类,显然一个状态的更新必定是来自同一类的,并且可以单调维护。即f[j*v+d]必定是由f[t*v+d](t然后这题就水过去了#i原创 2016-02-26 14:02:25 · 1366 阅读 · 1 评论 -
BZOJ 1194: [HNOI2006]潘多拉的盒子
不废话了直接%%%%%%%%%%%%%%%%%%%%%%%%%%%%正文一看到自动机就好虚啊tarjan写错3次感觉药丸#include#include#include#include#include#includeusing namespace std;struct Edge{int to,next;}e[20005];int head[55],cnt;void原创 2016-03-22 17:15:19 · 516 阅读 · 0 评论 -
2286: [Sdoi2011消耗战
由于今天被数据结构虐了,所以果断来水一水虚树的题。这题每次树形DP一下大概是n*m的复杂度,妥妥的炸掉了。然而我们只考虑每次要处理的节点和他们的LCA们,于是就变成了sigma(k),即50W了。然后就是虚树的建法,感觉还是很有意思(不明所以)的。首先我们需要一个单调栈来维护一条从根节点延伸下来的链,然后我们有四个节点。1:当前点2:栈顶3:次栈顶4:lca(当前点原创 2015-12-28 19:56:14 · 743 阅读 · 0 评论 -
3611: [Heoi2014]大工程
继续水虚树。这题60S的时限把我吓坏了。然而3000多MS就A了,有幸到了rank 4,nice!。一开始还在纠结是点分治还是DP,后来想想既然能DP何不DP呢。于是就DP了。显然要维护三个量。ans2和ans3都好说,参照树上直径的求法就好了,次长+最长+1变形一下。ans1的话比较麻烦,手画个图看看,目测是当前子树的边与其他子树的边对应,然后其他子树的边再和当前子树原创 2015-12-28 21:08:18 · 586 阅读 · 0 评论 -
hihoCoder 1147 时空阵
感觉我只会做这题了。。。。。。。Clj给的题解只有一句话QAQ,Holy High只能自己YY了。由于K于是乎边只能和上一层以及本层的节点相连。设状态(i,j,k)为处理到第i层,共处理了j个结点,本层有k个结点。于是就可以从(i-1,j-k,x)转移过来,转移的时候k个结点有在本层中可以有k*(k-1)/2条边,上一层点集的非空子集有2^x-1个,本层每个结点与上一层各子原创 2015-12-27 18:17:29 · 671 阅读 · 0 评论 -
3437: 小P的牧场
斜率优化什么的真心无脑。令sum[i]=sigma(b[k])(k则f[i]=min(f[j]+i*(sum[i]-sum[j])-mul[i]+mul[j])(j单调队列维护就好了。#include#include#includeusing namespace std;const int N=1000000+5;typedef long long ll;ll f[N]原创 2015-12-24 13:27:32 · 330 阅读 · 0 评论 -
2734: [HNOI2012]集合选数
Orz黄学长。看了题目N久毫无头绪。原来是自己懒得动笔。。。。。。。列个矩阵就可以很明显地看出状压DP了。#include#include#includeusing namespace std;typedef long long ll;const int mod=1000000001;int f[20][2048];int mat[20][20],bin[20],s[原创 2015-12-23 19:51:38 · 367 阅读 · 0 评论 -
1093: [ZJOI2007]最大半连通子图
无事闲来水一水Tarjan,结果水挂了。。。。。。先Tarjan缩点。第一问是DAG上的最长路径(点权)第二问是最长路径的方案数。都是DP。然而第二问坑了。。。。。。因为没判重边(很明显重新建图的时候会出现重边啊)毕竟还是弱啊。#include#include#include#includeusing namespace std;const int N=1原创 2015-12-23 10:55:47 · 494 阅读 · 0 评论 -
1023: [SHOI2008]cactus仙人掌图
好难不会做TAT。只好Orz各路神犇的题解。搞了一个小时,终于乱搞出来了。大概就是Tarjan+树形DP+环上单调队列DP+乱七八糟的讨论。脑子有点糊了。#include#include#includeusing namespace std;const int N=50000+5;inline int read(){ int x=0;char ch; while(原创 2015-12-23 09:56:21 · 332 阅读 · 0 评论 -
1833: [ZJOI2010]count 数字计数
数位DP裸题。写代码5min,交上去,WA。。。。。。。。对拍半小时,错误不断,终于过了。果然对拍还是不能少,AC率又掉了55555555#include#include#includeusing namespace std;typedef long long ll;ll f[20][20][20],ex[20];void dp(){ ex[0]=1; for(in原创 2015-12-20 21:26:49 · 320 阅读 · 0 评论