dp
阿狸是狐狸啦
这个作者很懒,什么都没留下…
展开
-
CodeForces 571B Minimization(dp)
题意:一个长度为n的序列和一个k,求一个排列使的最小。 显然我们需要对序列n从小到大排序,保证相邻两数差值最小,对于序列n我们可以分为长度为n/k和n/k+1的若干个序列且每个序列中每个数的位置相差k,对于每个序列我们的得到的|a[i]-a[i+k]|总和即为|a[n|-a[1]| 。那么我们要解决的便是这若干个序列的划分问题。令dp[i][j]表示已经确定了i个系列,其中长度为n/k原创 2017-12-02 10:42:22 · 203 阅读 · 0 评论 -
UVALive4015(树形dp)
题意:给一棵树,每条边有边权,有Q次询问,求从根节点出发,走不超过x单位距离,最多经过多少个点。题解:设置一个三维的状态dp[i][j][1],表示以i节点为根的子树,经过j个节点,然后回到i节点的最小花费.dp[i][j][0],表示以i节点为根的子树,经过j个节点,然后不回到i节点的最小花费.剩下的是一个简单的dfs。#include <bits/stdc++.h&...原创 2018-07-18 15:16:58 · 138 阅读 · 0 评论 -
UVALive - 4987 (dp+贪心)
题意:n个施工队,m个避难所,在一个正x坐标轴上,给出每个施工队坐标和每个避难所坐标,要求每个施工队到一个避难所避难,且每个避难所至少有一个施工队,求所有施工队所走的距离和的最小值。题解:先把施工队和避难所排个序,可以设状态dp[i][j]表示前i个施工队用j个避难所的最小花费。容易得出第i个施工队到第j个避难所造成的花费是最小的。即dp[i][j]=min(dp[i-1][j-1],dp...原创 2018-07-18 17:59:05 · 216 阅读 · 0 评论 -
数位dp入门
前些天做牛客多校碰到一个题目,题解要用到数位dp,OTZ,不会该怎么办,学什么,愣着啊。所谓数位dp统计每一位数字的情况,统计的过程中一定会遇到各种重复,那么我们利用记忆化的方法来避免这些重复计算就是我们今天要学的数位dp。话不多说,我们先从一个小例子来说,这个题意很简单就是不要49。让你统计[l,r]区间内没有出现49的数有几个。比如4,9,94,123,1419,这些数都没出现49...原创 2018-07-31 16:29:05 · 727 阅读 · 1 评论 -
hdu6321
题意:给出n个点,q次操作,每次增加一个边,或删除一个边。问你每次操作后图中的匹配数为k的方案有多少种。思路:看到n=10,可以想到暴力枚举每个状态。因为操作数右30000种,可以想到状态转换,所以可以使用状压dp。要预先处理好每个数字含有的1的个数,还有含有偶数个1的点要预先存储一下。不然会T,然后我们根据每个操作后所含的点来转移状态。#include <bits/std...原创 2018-08-08 14:16:29 · 222 阅读 · 0 评论 -
bzoj3450 (概率dp)
题意:有一个长度为 n 的字符串,由 o,x,? 三种字符组成。? 代表 o,x 各有 50% 概率。求连续 o长度的平方和的期望。思路:由平方公式可得,那么就可以设i之前连续的o的长度期望为f[i].如果s[i]='o'那么答案贡献为f[i-1]*2+1,f[i]=f[i-1]+1.如果s[i]='x'f[i]=0,贡献也为0如果s[i]='?'贡献为(f[i-1]*2+1)/2...原创 2018-08-17 09:32:23 · 261 阅读 · 0 评论 -
Codeforce 431C - k-Tree(简单dp计数)
题意:一颗满二叉树。每个点有k条边,边的权值为1~k,问你从root出发有多少种方案路径综合为n,且至少有一条边权值大于等于于d。思路:我们定义状态dp[i][j][k]=1; 表示当前在第i层,当前权值和为j,k为1表示已经有大于等于k的边 ,k为0表示还没有大于等于k的边 。dp[0][0][0]=1,然后就是简单的转移了。#include <bits/stdc++.h&g...原创 2018-11-17 13:37:55 · 304 阅读 · 0 评论 -
UVA - 11825 (状压+子集枚举)
题意:给你若干个集合,让你把这些集合做划分使的每个划分的并集是一个全集,问你最多能进行多少个划分。思路:首先了解下子集枚举的方法 for (int i = s; i; i = (i - 1) &s)i - 1使得末尾最右边的1右边的0变成1,自己变成0,然后经过与运算把不存在的1删掉,原来是0的位无论如何也不会变成1,但是原来是1的位就形成了不断-1的模式。有了这...原创 2019-01-18 11:22:34 · 212 阅读 · 0 评论 -
UVA - 10859 (树形dp,一个变量维护两个值)
题意:给你一个森林,每个点可以放一台灯,这台灯会照亮和它相邻的边,然你求最少安装几台灯能照亮所有的边,并且保证灯的数量最少的情况下,被两台灯同时照亮的路尽可能多,输出灯的数量,同时被两台灯照亮的边数,被一台灯照亮的边数。思路:很明显的树形dp,我们先考虑让灯最少的情况。用dp[i][0]表示当前节点没有灯,并且他相邻的边都有灯照亮所需灯的最小值。用dp[i][1]表示当前节点有灯,并且他相邻的...原创 2019-01-18 11:58:59 · 188 阅读 · 0 评论 -
UVALive - 4794 (状压枚举子集)
题意:给你一块x*y的巧克力,n个面积a[i],每次只能横着或者竖着切一次,问你是否能切出来n块面积为a[i]的巧克力。思路:n为15,可以想到状压所有状态,然后记忆化搜索,设立状态d[x][s],sum[s]表示集合为s的巧克力面积和就是当前要切的巧克力的面积,x表示当前要切的巧克力的长和宽的最小值,那么我们就知道当前巧克力的长和宽,当前状态向下转移时有两种方式,一种是把长分为两部分,一种是...原创 2019-01-18 17:39:25 · 129 阅读 · 0 评论 -
UVALive - 4625(dp+二分)
题目:给n个数,把它们分成m-1段,每段长度不超过d,且每段长度必须为偶数,让你最小化每段的半段权值。(注意是半段)思路:如果没有半段限制的话,我们可以贪心从左到右将可行的分段尽量拉长。但是加上半段限制后,我们贪心的话就错了。114 5 1018 11 9 96 3 11 96 67 31 12 58 68 98 76上面这组数据的答案是110,而从左到右的贪心得到的结果是12...原创 2019-01-19 11:00:28 · 154 阅读 · 0 评论 -
UVALive - 4394 (区间dp)
题意:给出两个字符串;每次可以选择第一个字符串的一个区间,全部刷成某一个字母;问最少刷几次可以刷成第二个串。题解:假设a是一个空串,设dp[i][j]为把空串a的【i,i+len-1】位置刷成b串【i,i+len-1】,需要刷几次。其中len为我们当前子串的长度。可以得到当b[i]等于中间某个位置b[j]时dp[i][i+len-1]=min(dp[i][i+len-1],...原创 2018-07-18 11:23:40 · 166 阅读 · 0 评论 -
山区修路(河南第十一届省赛C题)
2107 : 山区修路时间限制:3 Sec 内存限制:128 MiB提交:30 答案正确:13提交 状态 讨论区题目描述SNJ位于HB省西部一片群峰耸立的高大山地,横亘于A江、B水之间,方圆数千平方公里,相传上古的神医在此搭架上山采药而得名。景区山峰均在海拔3000米以上,堪称"华中屋脊"。SNJ是以秀绿的亚高山自然风光,多样的动植物种,人与自然和谐共存为主题的森林生态区。SNJ处于中国地势第二阶...原创 2018-06-05 11:08:35 · 957 阅读 · 0 评论 -
CodeForces - 573B
题意:n个塔,每个塔有一个高度,每次消除最外面一层,问几次可以消除完。扫面法,左右各扫一遍吗,找每个塔消除用的最小次数,然后找最大值。#include #include #include #include #include using namespace std;typedef long long ll;int dp[1000005];int main(){ int原创 2017-12-02 13:29:53 · 564 阅读 · 0 评论 -
UVA 11552 dp
题意:给一个正整数k和字符串s,s的长度是k的倍数,把s每k个字符分成一组,没组之间的字符可以任意重排,但组与组之间的顺序保持不变。任务是让重排后的新字符串s'的块最少,连续相同的字符组成一个块,比如abbbaa有三个块a、bbb、aa。思路见代码#include #include #include #include using namespace std;//d原创 2017-11-24 16:15:30 · 179 阅读 · 0 评论 -
UVALive - 3363 String Compression (区间DP)
给你一个字符串,让你把它压缩,比如gogogo可以压缩成3(go),letsgogogoletsgogogo可以压缩成2(lets3(go)),然后问你压缩后的最短长度。典型的区间dp递推方程:dp[j][i]=min(dp[j][i],dp[j][k]+dp[k+1][i]);dp[j][i]=min(dp[j][i],dp[j][j+k-1]+2+get(tmp));#in原创 2017-11-25 12:33:19 · 160 阅读 · 0 评论 -
UVALive - 4123 Glenbow Museum
题意:O代表90度,R代表270度,给你一个n问你存在多少长度为n的串,串可以组成一个封闭的多边形。如n=4时序列只能是OOOO,即一个四边形。当n=6时满足题意的序列有RRRRRO,RRRROR,RRRORR,RRORRR,RORRRR,ORRRRR.思路:再看了好多题解加一晚上时间的理解后写了一些自己的理解通过观察我们可的R的数量总比O多4个。那么最多有4对RR,且没有原创 2017-12-21 22:14:32 · 192 阅读 · 0 评论 -
UVA - 1252 Gym - 100676G (状压dp)
题意:给你n个长m的不相同的0,1字符串,代表n个人对m个问题的不同回答,问你至少问几个问题可以知道是哪一个人。dp[i][j]表示问题串为i且答案为j时能否区分所有人。 #include <stdio.h>#include <algorithm>#include <iostream>#include <string.h>usi...原创 2017-11-25 13:47:17 · 183 阅读 · 0 评论 -
hdu1011Starship Troopers(树形dp)
题意:n个洞m个士兵,一棵树,从起点开始往下走,每个节点有一个价值,需要打败该点所有BUGS才能得到他的价值,每个士兵可以打败20个BUGS,问你最多得到的价值。思路dp[i][j]=max(dp[i][j],dp[i][j-k]+dp[son[i]][k]);明天再写吧,睡觉QAQ~~原创 2017-12-13 23:42:51 · 106 阅读 · 0 评论 -
HDU - 5115 (经典区间dp)
题意:n头狼,杀死第i头狼会受到b[i-1]+b[i+1]+a[i]的伤害,问杀死所有狼受到的最小伤害值。因为无论怎么选,a值都只需要加一遍,所以先把a的和算出来,最后加到答案上就行了。我们可以在两边加一头a值和b值都为0的狼,dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]+b[i]+b[j]);答案为dp[0][n+1].#include #in原创 2018-01-26 10:58:52 · 323 阅读 · 0 评论 -
LightOJ-1095-math(错排)
题意:n个数1,2,3....n,问你前m个数中有只有k个数在原位上的方案数。题解:首先在前m个数选择k个,让着这k个数位置不变,然后前m个数的剩下m-k个数肯定要错排,而剩下的n-m个数可能错排也可能不错排,所以我们可以枚举后n-m个数没有参加错排的数个数[0,n-m],然后可推出公式ans=C(m,k)*singma(d[n-k-i]*c[n-m][i])#include <cstdio...原创 2018-02-27 21:02:13 · 205 阅读 · 0 评论 -
151 - ZOJ Monthly, March 2018 - H同CF 415D Mashmokh and ACM(DP)
题意:问你有多少个a串满足,a[i]%a[-1]==0,且a串的长度为m。结果mod1e9+7。题解:zoj的月赛题,比赛时一直tle到想吐,一直想着是个数学题,到最后也没推出公式,赛后发现是codeforce上的原题,拿着t的代码在codeforce上交了一发竟然A了。。。比赛的数据是t组,而codeforce的数据是一组一组的测的。所以在zoj上我写的代码会超时,codeforce则不会,这题...原创 2018-03-10 17:58:09 · 253 阅读 · 0 评论 -
hdu5616 (01背包或者折半枚举)
题意:n个砝码,给你若干个重物,问你是否能称出来。题解:n只有20所,直接枚举有三种状态,放左边,放右边,不放。共有3^20次方情况。如果枚举一半,找另一半,找另一半共有2*(3^10)次方复杂度,方法可行。还有一种折半方法,把20个物品重量取相反数变为40个物品,然后对于这40个物品的取放便包含了所有情况。直接枚举复杂度2^40,这题的重量很小,重复量很多,其实暴力枚举可以水过去。而另一种方法当...原创 2018-04-17 16:00:05 · 292 阅读 · 0 评论 -
codevs5339(反着dp)
【题目背景】小奇要开采一些矿物,它驾驶着一台带有钻头(初始能力值w)的飞船,按既定路线依次飞过喵星系的n个星球。【问题描述】星球分为2类:资源型和维修型。 1.资源型:含矿物质量a[i],若选择开采,则得到a[i]p的金钱,之后钻头损耗k%,即p=p(1-0.01k) 2.维修型:维护费用b[i],若选择维修,则支付b[i]p的金钱,之后钻头修复c%,即p=p(1+0.01c) ...原创 2019-02-24 11:12:51 · 143 阅读 · 0 评论