Acm--动态规划
zzti_xiaowei
xxx
展开
-
51Nod-1086 背包问题 V2
[题目链接]思路:二进制优化多重背包,刚好瞅个模板,啦啦啦~ 代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int Max_n=110;const int Max_m=1e5+1...原创 2018-04-15 12:41:02 · 119 阅读 · 0 评论 -
poj-2184 Cow Exhibition
[题目链接] 有很多小牛,每只有一个幽默度和智商,要选出一些小牛,智商加幽默度总和最大,其中智商总和和幽默度总和都不能是负数。思路: 变种的01背包,可以把幽默度看成体积,智商看成价值,那么就转换成求体积和价值都为正值的最大值的01背包了。(一看就有点01背包的感觉,可是还是菜啊~~) 代码:#include<iostream>#include<cstd...原创 2018-08-23 15:06:41 · 135 阅读 · 0 评论 -
[kuangbin带你飞]专题十二 基础DP1
Hdu-1024 Max Sum Plus PlusHdu-1029 Ignatius and the Princess IV// 简单桶排序,dp[i]记录数字i出现的次数#include&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;lt;iostream&amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt原创 2018-08-31 00:06:18 · 177 阅读 · 1 评论 -
poj-2392 Space Elevator
[题目链接]思路:多重背包的变形题,重量和价值都是高度h,容量是c。对于每个高度限制ai,限制了取到第i个物品最大能达到的最大价值。首先,要对高度限制ai进行从小到大排序(不难想的~)本题O(K*K*h*logc)的复杂度竟然没有T,好气哦~代码:#include<iostream>#include<cstdio>#include<cstring&...原创 2018-08-24 12:38:27 · 142 阅读 · 0 评论 -
poj-3616 Milking Time
[题目链接]思路:最大递增子序列,一开始还真没想出来,有点尬~ 代码:#include&amp;lt;iostream&amp;gt;#include&amp;lt;cstdio&amp;gt;#include&amp;lt;cstring&amp;gt;#include&amp;lt;algorithm&amp;gt;using namespace std;原创 2018-08-28 18:31:26 · 133 阅读 · 0 评论 -
poj-3280 Cheapest Palindrome
[题目链接]思路:区间dp,求添加最少代价的字母让字符串变为回文串。删除和添加一个字符在本质上是相同的,所以二者取最小。dp[i][j]:表示区间[i,j]变为回文串的最小代价。如果s[i]==s[j],dp[i][j]=dp[i+1][j-1]。dp[i][j]=min(dp[i+1][j]+cost[s[i]],dp[i][j-1]+cost[s[j]])。代码:...原创 2018-08-29 15:11:50 · 132 阅读 · 0 评论 -
poj-3666 Making the Grade
[题目链接]思路:一开始一脸懵逼的没思路,看了两天题解终于搞懂了,开森~,同时膜拜大佬! 题目给出了一列数,要求通过修改某些值,使得最终这列数变成有序的序列,非增或者非减的(数据很弱,只用求非严格递增即可),求最小的修改量。首先我们会发现,最终修改后,或者和前一个数字一样,或者和后一个数字一样,这样才能修改量最小。 我们先根据原数列排序,确定元素的大小关系,对应编号为p[i]。...原创 2018-08-25 18:13:27 · 129 阅读 · 0 评论 -
Hdu-1074 Doing Homework
[题目链接]思路:第一道状压dp,以前下决心学过一次,未果,今年再战! 十分感谢博主黑色的夢。用二进制压缩状态(用0表示没做,1表示做了),当n=3时,dp[111]表示三门课都做了,为我们最终求的状态。dp[011]:表示第1、2门课做了,第3门没做(二进制从右至左看)。定义好状态,就要讨论状态转移了,做了三门课的最优解由做了两门课的解得到,做了两门的最优解由做了一门课的解得到,做...原创 2018-09-08 18:01:09 · 131 阅读 · 0 评论 -
铺砖问题(状压dp)
感受: 一直把《挑战程序设计竞赛》奉为神作,写的真是太好了,超级给力。可是去年看了一周的状压dp,只是对旅行商问题有一点感觉,铺砖问题更是一脑袋浆糊,学的太吃力了,无奈放弃了。今年突然心血来潮,又学了一波,无奈还是卡卡卡到铺砖问题,原来书上的解法是没见过的轮廓线动态规划解法,真是被搞得不要不要的,好气!!!博客:在此表示深深的感谢~ 状态压缩动态规划 POJ 2411 (编程之美-瓷砖覆盖地...原创 2018-09-12 01:24:46 · 1782 阅读 · 0 评论 -
旅行商问题(TSP)
问题描述: 给定一个n个顶点组成的带权有向图的距离矩阵d(i,j)。要求从顶点0恰好经过每个顶点一次后再回到顶点0的权重和最小值。题解详见《挑战程序设计竞赛》119页代码:int n;int d[Max_n][Max_n];int dp[1<<Max_n][Max_n]; //dp[s][u]:表示当前状态(已访问顶点集合)为s,在顶点u的最小值 int re...原创 2018-09-12 23:32:34 · 2019 阅读 · 0 评论 -
Poj-2686 Traveling by Stagecoach
[题目链接]思路:经典的状压dp,写的太少了~dp[s][u]表示剩下的车票集合为s并且现在在城市u的状态所需要的最小花费 。现在所在的城市u,剩下的车票集合为s,从这个状态出发,使用一张车票i(i在剩下车票集合s中)移动到城市v,相当于从状态dp[s][u]转移到了状态dp[s\i][v],实现了状态转移!代码:#include<iostream>#inc...原创 2018-09-10 17:38:13 · 122 阅读 · 0 评论 -
点集配对问题
<摘自刘汝佳训练指南P61>题意: 空间里n个点(n为偶数),把它们配成n/2对点,使得每个点恰好在一个点对中,要求所有点对中,两点距离之和最小值,其中n<=20。思路: dp(s):表示集合s配对后的最小距离和。 状态转移方程: dp(s) = min(dp{S - {i} - {j}+ |Pi Pj| | j∈S, j > i, i = min{S}...原创 2018-09-14 11:46:32 · 2213 阅读 · 0 评论 -
CF#553 C. Ayoub and Lost Array
[好评] 简单的dp题目,类似于hdu一道滑稽树上不同时间掉滑稽果,人在树下移动,求接到最多滑稽果的数量。只是这道题题意很有那么显然,dp菜菜,想了好久~#include&lt;iostream&gt;#include&lt;cstdio&gt;#include&lt;cstring&gt;#include&lt;algorithm&gt;using names原创 2019-01-24 21:25:09 · 436 阅读 · 0 评论 -
poj-2385 Apple Catching
[题目链接]思路:很简单的三维状态dp题目,状态也十分好想的,dp有待提高! 代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int t,w;int a[1100];int dp[11...原创 2018-08-22 15:17:56 · 124 阅读 · 0 评论 -
Aoj-2200 Mr. Rito Post Office
[题目链接]思路:想想脑瓜就疼,好复杂,看着题解吧啦吧啦一下~~ 在一些城市中有水路和陆路连接,每一条路都有长度。但是水路必须乘船,且坐船到达某个位置后船必须留在那里,下次坐必须回到该地。现在有m城市要到达,且必须按照指定的顺序,问最小代价。最短路+dp:首先预处理出任意两点间只走水路或陆路的最小代价,然后考虑dp。记状态dp[i][j]代表要到第i个任务所指定的城市且将...原创 2018-08-19 14:50:58 · 409 阅读 · 0 评论 -
Poj-1742 Coins
[题目链接]思路:很不错的一道DP题呐~ 定义: dp[i+1][j]为前i种数加和得到 j 时第 i 种数最多还能剩余多少个(不能加和得到 i 的情况为 -1)代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using n...原创 2018-04-15 17:58:01 · 109 阅读 · 0 评论 -
Poj-3046 Ant Counting
[题目链接]思路:定义dp[i][j]为从前i中物品中取出j个的组合总数。(值得自己好好推一推~) 当j≤a[i]时,dp[i][j]=dp[i-1][j]+dp[i-1][j] 。j>s[i]时,dp[i][j]=dp[i-1][j]+dp[i-1][j]-dp[i-1][j-1-a[i]]。代码:#include<iostream>#include&l...原创 2018-04-18 10:49:41 · 165 阅读 · 0 评论 -
51nod-1007 正整数分组
[题目链接]思路:重量和价值都相等的01背包变形,不过很不好看出来哦。像01背包一样定义dp[i][j]表示为从前i个数中,总和不超过j的最大值就好啦。代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespa...原创 2018-04-18 16:09:05 · 113 阅读 · 0 评论 -
Hdu-4347 F(x)
[题目链接]思路:这个f(x)计算就和数位计算是一样的,就是加了权值,所以dp[pos][sum],这状态是基本的。a是题目给定的,f(a)是变化的不过f(a)最大好像是4600的样子。如果要memset优化就要加一维存f(a)的不同取值,那就是dp[10][4600][4600],这显然不合法。 这个时候就要用减法了,dp[pos][sum],sum不是存当前枚举的数的前缀和(加权的),而...原创 2018-04-23 21:40:50 · 287 阅读 · 0 评论 -
Poj-2229 Sumsets
[题目链接]思路1:刚开始用完全背包写的,想的肯定能过,然1000ms,简直吓死~#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int mod=1e9;const int Max_n=1...原创 2018-05-01 10:46:18 · 115 阅读 · 0 评论 -
Hdu-2089 不要62
[题目链接]思路:打表+暴力枚举 很不错的想法,不过不是最好的,如果n≤1e7,将会无情的TLE。数位dp,真的很优雅~,值得学习。// 非常非常非常推荐我转载的一篇大佬写的数位DP总结,Orz、代码:#include<iostream>#include<cstdio>#include<cstring>#include<...原创 2018-04-20 10:27:36 · 415 阅读 · 0 评论 -
Poj-3255 Round Numbers
[题目链接] 一个数的二进制中0的数量要不能少于1的数量。// 非常非常非常推荐我转载的一篇大佬写的数位DP总结,Orz、思路1: // 自己想哒 16ms dp[pos][k]记录的是枚举到pos位,最多还能用k个1的数量。可用1的数量是随着枚举数不同而变化的。#include<iostream>#include<cstdio>#include...原创 2018-04-24 18:21:44 · 84 阅读 · 0 评论 -
Hdu-3709 Balanced Number
[题目链接]思路:枚举支点位置,然后分别数位dp求和。dp[pos][x][sta]:表示枚举到pos位,支点为x,当前力矩为sta的个数。状态转移:dp[pos][x][st]+=dp[pos-1][x][st+i*(pos-x)]。0被支点每个位置都会统计到,要减去重复的。代码:#include<iostream>#include<cstdio>...原创 2018-05-09 23:17:49 · 168 阅读 · 0 评论 -
Poj-1065 Wooden Sticks
[题目链接]DP想法:贪心就不说了,主要是没看出来这题nlogn可解,Orz…题目的确需要稍加思考,这道题的要求其实是将所有stick分为x个不下降子序列( Ai <= Ai+1 ),然后问题归结于求x的最小值。x的最小值其实等于按l递增排序后stick按w最长下降子序列的长度L,证明如下:若x < L,先从stick中取出最长下降子序列L,取走的元素留下一个大小相同的“...原创 2018-05-04 10:19:46 · 126 阅读 · 0 评论 -
Zoj-3962 Seven Segment Display
[题目链接]思路:数位dp,感觉可写的,结果一直WA,第一道Zoj的题,坑给了大数要%lld读入….dp[i][j]:表示数位枚举到第i位,和为j的总花费(从高位枚举)代码:#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>usi...原创 2018-05-08 14:53:19 · 147 阅读 · 0 评论 -
51nod-1043 幸运号码
[题目链接]思路:刚开始一看数位dp,好久没写了,递归模板拿出来摸一摸,然后掉进坑里了无限TLE,根本不需要啊!再然后,看了一下题解和自己想的差不多,一直写一直写,无限找bug,取模mod=1e9+10,麻蛋,加毛线的10啊~~ 用dp[i][j]表示i个数的和为j的总数,这里面是包括0开头的情形,有dp[i][j]=dp[i-1] [j-k] (k从0到9)。 很好想,i个数组...原创 2018-06-30 20:55:44 · 109 阅读 · 0 评论 -
51nod-1636 教育改革
[题目链接]思路:不难的一道dp题目,状态都想好了,略估一下复杂度想可能会TLE,结果却一直是WA,头疼~ dp[i][j][k]:表示第i天选第j门课作业量为k时的最大总作业量。 第i天选第j门课的状态可由第i-1天选复杂度小于第j门课的状态转移得到。代码:#include&lt;iostream&gt;#include&lt;cstdio&gt;#inclu...原创 2018-06-27 18:25:54 · 184 阅读 · 0 评论 -
石子合并(经典区间dp)
[题目]:n堆石子摆成一条线。现要将石子有次序地合并成一堆,规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的代价。计算将n堆石子合并成一堆的最小代价。[普通解法]:状态转移方程:f(i,j)=min{f(i,k)+f(k+1,j)}+w(i,j)f(i,j)=min\{f(i,k)+f(k+1,j)\}+w(i,j)f(i,j)=min{f(i,k)+f(k+1,...原创 2019-02-12 20:51:11 · 220 阅读 · 0 评论