dp
LittleRewriter
这个作者很懒,什么都没留下…
展开
-
codeforces 835D
首先在下参考了 http://blog.csdn.net/xjh_shin/article/details/76550463 以及原作者的代码 http://codeforces.com/contest/835/submission/29077222 嗯……dp什么的最讨厌了先说说题意。 一个字符串是1-回文串当且仅当其左半部分与右半部分相等 一个字符串是k-回文串当且仅当它是1-回文串原创 2017-08-02 20:23:21 · 665 阅读 · 0 评论 -
BZOJ1003/luogu1772/ZJOI2006 物流运输
很有趣的一道图论+DP。首先看数据范围,m小于等于20,直观感受状压DP…不过蒟蒻并没有想出来怎么转移。 有一个自然而然的想法:能不能每次将堵塞的边的代价加上去,然后最后求一次最短路?但是这样很难维护转多少次,所以PASS. 于是我就可耻的看了一下题解区。 首先我们先列这样一个转移方程: dp[i]=min{dp[k]+g[k+1][i]∗(i−k)+K}dp[i] = min\{ d原创 2018-01-11 16:49:52 · 342 阅读 · 0 评论 -
codeforces895C Square Subsets
什么,这是状压DP??? 是在下输了…输的心服口服… ABC都是好题啊…前排提醒,由于latex没有^这个符号,所以用⨁\bigoplus 代替 首先看看数据范围,70这个玄学范围,emmm… 理性分析查找题解一波,我们想起来要的是完全平方数,那么就可以搞一些大新闻: 用dp[i][j]dp[i][j]表示前ii个数达到状态jj的情况有多少种,这里的状态jj表示某一个因子有奇数个还是偶数个原创 2017-12-16 00:52:38 · 406 阅读 · 0 评论 -
cf886E Maximum Elements 题解
DP神题。也是本蒟蒻做的第一道组合数学+DP题。先来看看题意。Petya嫌弃自己求区间最大值的做法太慢了,所以发明了这样一个函数:int fast_max(int n, int a[]) { int ans = 0; int offset = 0; for (int i = 0; i < n; ++i) if (ans < a[i]) {原创 2017-11-15 22:43:05 · 429 阅读 · 0 评论 -
NOIP专题复习(三) 状压DP学习笔记
其实并不是三,已经走了很多专题了。 之后慢慢填坑吧。我觉得学普通的DP已经救不了我了。 发觉似乎NOIP状压蛮裸的(flag立的飞起),于是学一波。其实在下作为一只蒟蒻,认为状压DP属于很好理解但不太好写的类型。 还是从经典例题互不侵犯开始。luogu1896 互不侵犯 在N×N的棋盘里面放K个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上原创 2017-11-05 22:30:54 · 911 阅读 · 1 评论 -
cf891A Pride 题解
有史以来第一次rating为正..手速之力是无穷的!(雾) 这题还是蛮有趣..想到了区间DP但是发现转移不动,还是naive..来看看题意。一串数,每次只能将相邻两个元素中的一个变成1,问要求最少多少次GCD才能全为1。如果不能,就输出-1。 如: [2, 2, 3, 4, 6]变换: - [2, 1, 3, 4, 6] - [2, 1, 3, 1, 6] - [2, 1, 1, 1,原创 2017-11-18 12:00:37 · 978 阅读 · 0 评论 -
NOIP专题复习(一) 基础的背包问题
之所以要走这么一个专题原因也很简单,在下的基础实在是太薄弱了… 所以接下来可能会变成非常基础的题、略有难度的题和模板题并存的东西.. 于是就是这样,就先从背包开始吧(dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]) 滚动数组优化版:dp[i]=max(dp[i],dp[i-w[i]]+v[i])而对于完全背包,dp[i]=max(dp[i],dp[i-原创 2017-10-17 22:57:15 · 748 阅读 · 0 评论 -
刘书dp学习笔记(1) 数字三角形与DAG上dp(上)
我之前没怎么看过刘书,然后前几天看了一下dp,感觉dp观被刷新了… 终于明白为什么说刘书是神书了! 用[]括住的是在下的一些浅见与笔记。 顺便一提,在下不保证代码是能过评测的,因为只试了其中几个数据。数字三角形数字三角形应该是最基础的dp题之一吧…转移方程 dp[i][j]=a[i][j]+max(dp[i+1][j],dp[i+1][j+1]) 其特点为全局最优解包含局部最优解。记忆化搜原创 2017-09-02 15:48:07 · 452 阅读 · 0 评论 -
刘书学习笔记(4)线性结构上的dp(上)
LISdp[i]=max{dp[j]}+1LCSA[i]=A[j] dp[i][j]=dp[i-1][j-1]+1 否则 dp[i][j]=max(dp[i-1][j],dp[i][j-1])9-6比较蛋疼的语文题…… 如果语文比较好几乎是裸LIS…虽说大概需要纠结一下常系数9-7dp[i]=min(dp[j]+1|s[j+1~i]为回文串) 并不太明显的LIS,不过不妨思考一下。 [LIS原创 2017-09-08 20:37:10 · 385 阅读 · 0 评论 -
刘书学习笔记(3)多阶段决策问题
多段图的最短路单向TSP问题状态:从[i][j]开始的最小开销 转移:dp[i][j]=min(dp[i+1][(j-1)%m],dp[i][j+1],dp[i+1][(j+1)%m] 现在的问题是,我们如何求出字典序最小? 有个规律请牢记: 正序前驱最小,逆序后继最小。 换句话说,逆推可以保证字典序最小。可能有些不太明白是什么意思,不过我们不妨设想一下,逆推就是从后往前,所以这样原创 2017-09-05 23:07:33 · 769 阅读 · 0 评论 -
刘书学习笔记(2)DAG上dp(下)
硬币模型有n种硬币,面值V1,V2,...,VnV_1,V_2,...,V_n且有无限多个。给定S,可以选出多少硬币,使得总额为S?求出该数量的最大值和最小值。硬币模型的区别在于,这里的起点和终点都是确定的。我们求的就是确定起点、终点的DAG最短路。 以最短路为例,转移方程:dp[i]=min{dp[i-V[j]]},这里的i表示从0出发到i的最短路径长度。 实现:#include <iostr原创 2017-09-04 22:13:59 · 405 阅读 · 0 评论 -
Codeforces837D RoundSubset
首先在下参考了评测#29184017 以及http://blog.csdn.net/my_sunshine26/article/details/76652764 我天真的以为这是一个区间dp……没想到竟然是埋藏这么深的一道背包。是在下输了。来说说题意。有n个数,其中选k个,要让我们输出这k个数之积的最多的0的个数。比如50 4 20里选俩,50*4=200有两个0,4*20=80有1个0,50*原创 2017-08-04 15:46:40 · 421 阅读 · 0 评论 -
codeforces914C Travelling Salesman and Special Numbers 二进制特性+组合数学+递推
比较骚的一道题。。 题意大概是,我们定义一次操作α" role="presentation" style="position: relative;">αα\alpha:将一个数i" role="presentation" style="position: relative;">iii二进制是1的位数取出来。 比如说,1010=10102" role="presentation"原创 2018-01-30 23:10:29 · 656 阅读 · 1 评论