![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM动态规划
桑榆207
在最终的结果到来之前,任何肯定会赢之类的话都是虚无缥缈的。
展开
-
LeetCode 322. 零钱兑换 完全背包
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。示例1:输入: coins = [1, 2, 5], amount = 11输出: 3 解释: 11 = 5 + 5 + 1示例 2:输入: coins = [2], amount = 3思路:因...原创 2020-03-16 23:40:27 · 194 阅读 · 0 评论 -
HDU - 1025 Constructing Roads In JGShining's Kingdom (nlogn 最长上升子序列
题意:求最长上升子序列,但这个要用二分法:博客参考:https://blog.csdn.net/idealistic/article/details/52181408#include<iostream>using namespace std; long d[500001],a[500001]; //d[i]用来存最长不降子序列 最后一个元素 long find(...原创 2018-08-17 10:15:19 · 112 阅读 · 0 评论 -
HDU-1069-Monkey and Banan分析(贪心&&动态规划)
经典的dp问题,给出n种类型的长方体石块,给出每种的长、宽、高,每种石块有三种摆放方式,数量不限,可以累加着往上放,问最多能放多高?但是有个限定条件,下边的面积一定要大于上边的面积,长和宽必须均小于下面石块的长和宽才能放上去。分析:先对面积进行排序,每种石块可以有不同的摆放方式,这样就意味着可以看做不同的石块;按面积从大到小进行排序,然后还要满足下面的长和宽都要大于上面的长和宽。若不排序...原创 2018-08-17 10:40:51 · 154 阅读 · 0 评论 -
猴子与香蕉(动态规划状态转移方程)
【问题描述】 一只猴子找到了很多香蕉树,这些香蕉树都种在同一直线上,而猴子则在这排香蕉树的第一棵树上。这只猴子当然想吃尽量多的香蕉,但它又不想在地上走,只想从一棵树跳到另一棵树上.同时猴子的体力有限,它不能一次跳得太远或跳得次数太多,每当他跳到一棵树上,就会把那棵树上的香蕉都吃掉。那么,它最多能吃多少个香蕉呢? 【输入格式】 输入第一行为三个整数,分别是香蕉树的棵数N,猴子每...原创 2018-08-17 15:02:17 · 2974 阅读 · 1 评论 -
Easy Game - lightOj 1031
AB两人轮流从一序列的左右两端取数,都采取最优策略,A先手,一次可以取多个,但只能从一端取,不能不取,问A取的数之总和最多比B大多少#include<bits/stdc++.h>using namespace std;typedef long long int LL;const int MAXN=110;LL pre[MAXN],dp[MAXN][MAXN];int m...原创 2018-08-18 11:45:35 · 198 阅读 · 0 评论 -
一排石子合并(区间dp)
有N堆石子排成一排,每堆石子有一定的数量。现要将N堆石子并成为一堆。合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。求出总的代价最小值。 #include <iostream>#include <cstdio>#include <cstring>using namespace std;//...原创 2018-08-17 21:08:31 · 216 阅读 · 0 评论 -
zoj 3469 Food Delivery(区间DP&&贪心&&分状态讨论)
有一家快餐店送外卖,现在同时有n个家庭打进电话订购,送货员得以V-1的速度一家一家的运送,但是每一个家庭都有一个不开心的值,每分钟都会增加一倍,值达到一定程度,该家庭将不会再订购外卖了,现在为了以后有更多的家庭订购,要将外卖送到的情况下使得所有用户的不开心值总和达到最小先将各个点按坐标排序,餐厅也算一个点;从小到大排序;状态转移方程:从餐厅向两边遍历:i为左,j为右,dp[i][j]...原创 2018-08-18 10:39:36 · 114 阅读 · 0 评论 -
乘积最大(区间dp)
今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加。活动中,主持人给所有参加活动的选手出了这样一道题目:设有一个长度N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大。分析:设dp[i][...原创 2018-08-17 21:28:35 · 493 阅读 · 0 评论 -
HDU 1078 FatMouse and Cheese(记忆化搜索)
FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension n: each grid location is labelled (p,q) where 0 <= p < n and 0 <= q < n. At each ...原创 2018-08-17 15:59:03 · 109 阅读 · 0 评论 -
LightOJ 1025 - The Specials Menu(区间DP分类讨论)
题意:给一个字符串,问删掉任意个字符串后为回文串的有多少个。dp问题最重要的首先是初始化问题,本题初始化应该为dp[i][i]=1;表示i->i间回文串个数;然后考虑s[i]!=s[j],s[i] != s[j]时,我们考虑dp[i][j]从dp[i+1][j]和dp[i][j-1]转移,删掉s[j],dp[i][j] += dp[i][j-1],删掉s[i],dp[i][j] +=...原创 2018-08-18 16:37:39 · 116 阅读 · 0 评论 -
Generating Palindromes - lightOJ 1033(区间dp)
题意给出一个字符串,问最小所需的字符数量使得插入这些字符后,该字符串成为回文串回文串+区间dp,dp[i][j]表示使给定字符串的i-j段成为回文串的最小插入字符数量, 在记忆化搜索中有三类情况,一种是i>=j,i>j的段是无意义的,而i=j的段本身肯定是回文,不需插入字符,都是0,之后分c[i]=c[j]和c[i]!=c[j]两类情况,如果c[i]=c[j],继续往这段字符...原创 2018-08-18 17:16:50 · 142 阅读 · 0 评论 -
一堆石子合并(环形拆分为链区间dp)
在一个园形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分.#include<cstdio> #include<cstring> #include<algorithm> #include<...原创 2018-08-18 21:52:51 · 295 阅读 · 0 评论 -
POJ 2955-Brackets(括号匹配区间DP)
题目大意:给出一个的只有’(‘,’)’,’[‘,’]’四种括号组成的字符串,求最多有多少个括号满足匹配。 思路:用dp[i][j]表示区间i~j的最大匹配数,对于dp[i][j] = dp[i + 1][j - 1] + (s[i]和s[j]匹配?2 : 0),开始时dp[i][j]均为0。 代码如下:#include <cstdio>#include <iostre...原创 2018-08-19 10:57:29 · 169 阅读 · 0 评论 -
整数划分(区间dp)
暑假来了,hrdv又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷。。亲爱的你能帮帮他吗?问题是我们经常见到的整数划分,给出两个整数 n , m ,要求在 n 中加入m - 1 个乘号,将n分成m段,求出这m段的最大乘积输入第一行是一个整数T,表示有T组测试数据接下来T行,每行有两个正整数 n,m ( 1&...原创 2018-08-19 15:53:12 · 252 阅读 · 0 评论 -
凸多边形三角划分(区间dp找状态转移方程)
给定一个具有N(N<=50)个顶点(从1到N编号)的凸多边形,每个顶点的权值已知。问如何把这个凸多边形划分成N-2个互不相交的三角形,使得这些三角形顶点的权值的乘积之和最小。dp[i][j]表示i-j的凸多边形划分后得到的最值;状态转移方程为dp[i][j]=dp[i][k]+dp[k][j]+a[i]*a[k]*a[j];#include <cstdio>#in...原创 2018-08-19 17:10:57 · 367 阅读 · 0 评论 -
Vijos--最小总代价(状压DP)
//第一天学状压dp描述 n个人在做传递物品的游戏,编号为1-n。游戏规则是这样的:开始时物品可以在任意一人手上,他可把物品传递给其他人中的任意一位;下一个人可以传递给未接过物品的任意一人。即物品只能经过同一个人一次,而且每次传递过程都有一个代价;不同的人传给不同的人的代价值之间没有联系; 求当物品经过所有n个人后,整个过程的总代价是多少。格式 输入格式 第一行为n,表示共...原创 2018-08-20 15:27:08 · 143 阅读 · 0 评论 -
数位dp大体模板(含13且是13倍数的数)
模板:https://blog.csdn.net/wust_zzwh/article/details/52100392typedef long long ll;int a[20];ll dp[20][state];//不同题目状态不同ll dfs(int pos,/*state变量*/,bool lead/*前导零*/,bool limit/*数位上界变量*/)//不是每个题都要判断前导...原创 2018-08-20 20:32:25 · 310 阅读 · 0 评论 -
不要62(数位dp普通写法和模板写法)
多组数据,每次给定区间[n,m],求在n到m中没有“62“或“4“的数的个数。如62315包含62,88914包含4,这两个数都是不合法的。0<n<=m<1000000//https://blog.csdn.net/zhangxian___/article/details/75304335假设我们现在把x分成了a1,a2,...,aL这样一个数组,长度为L,aL是最高...原创 2018-08-20 16:43:48 · 3898 阅读 · 1 评论 -
数位dp思想
一、基础篇——介绍 1、概念: 数位dp是一种计数用的dp,一般就是要统计一个区间 [A , B ] 内满足一些条件数的个数。 所谓数位dp,字面意思就是在数位上进行dp。 数位的含义:一个数有个位、十位、百位、千位......数的每一位就是数位啦! 之所以要引入数位的概念完全就是为了dp。数位dp的实质就是 换一种暴力枚举的方式,使得新...转载 2018-08-21 09:42:38 · 189 阅读 · 0 评论 -
数位dp思想
<数位DP> 所谓数位DP就是基于考虑数字的每一位来转移的DP。 例如求比456小的数,可以这么考虑, 4 5 6 4 5 (0~6) 4 (0~4) (0~9) (0~3)(0~...转载 2018-08-21 20:53:48 · 153 阅读 · 0 评论 -
HDU 3555含有49(数位dp)
题目地址:HDU 3555题意: 问(0, n]里面有几个数有'49'这个子串#include <iostream>#include <cstring>#include <deque>#include <cmath>#include <queue>#include <stack>#include <li...原创 2018-08-21 21:10:11 · 132 阅读 · 0 评论 -
数位dp入门(不含49)
给一个数字n,范围在1~2^63-1,求1~n之间含有49的数字有多少个。思想:总数-不含49的数;#include<iostream>#include<cstdio>#include<cstdlib>#include<cmath>#include<cstring>#include<algorithm>...原创 2018-08-22 11:43:55 · 281 阅读 · 0 评论 -
数位dp入门(HDU 4734)
题目给了个f(x)的定义:F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1,Ai是十进制数位,然后给出a,b求区间[0,b]内满足f(i)<=f(a)的i的个数#include<cstdio>#include<cstring>#include<iostream>#include<...原创 2018-08-23 09:45:51 · 191 阅读 · 0 评论 -
数位dp入门(1比0多+前导零问题)
题意:求一个区间内满足化为二进制后0多于1的数的数量#pragma comment(linker, "/STACK:10240000,10240000")#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<queue>#i...原创 2018-08-23 11:04:16 · 659 阅读 · 0 评论 -
数位dp入门(不要62题目)
统计区间 [a,b] 中不含 4 和 62 的数字有多少个。#include<iostream>#include<cstdio>#include<cstring>using namespace std;int f[8][2],bit[8];/*f[i][j]:i是位数j==0,尾位不是6j==1,尾位是6*/int dfs(int...原创 2018-08-22 10:58:29 · 190 阅读 · 0 评论 -
数位dp入门(13倍数且含13)
hdu 3652 B-number 题意:求小于n,是13的倍数且含有’13’的数的个数。n<1e9#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>using namespace std;const int N=15;int bit[...原创 2018-08-23 15:52:59 · 504 阅读 · 0 评论 -
数位dp入门(HDU - 5642 King's Order)
题意:告诉你国王发布的命令长度为n,由26个小写英文字母组成,命令中不能有连续的长度超过3个的重复的字母,比如aaccc是可以的但acccc是不可以的。问最多有多少种不同的命令是国王发出的,结果对1000000007取模。dp[i][1]表示长度为i,末尾有j个相同的字母,由题意知,j只能取1,2,3.dp[i][2]=dp[i-1][1]dp[i][3]=dp[i-1][2]...原创 2018-08-23 21:06:50 · 142 阅读 · 0 评论 -
树形dp入门(树形dp+邻接链表hdu 1520)
题意:学校要开一个聚会。学校的教职工之间有上下级关系,为了让所有人开心,宴会组织者决定不会同时邀请一个人和他的上级对于每一个人,他能给聚会带来的欢乐度有一个值,问组织者该邀请哪些人能够使宴会的欢乐度达到最大值。和https://blog.csdn.net/lanshan1111/article/details/81989680和这道题一样#include<stdio.h>#...原创 2018-08-24 10:54:13 · 226 阅读 · 0 评论 -
树形dp入门(The More The Better)
Problem DescriptionACboy很喜欢玩一种战略游戏,在一个地图上,有N座城堡,每座城堡都有一定的宝物,在每次游戏中ACboy允许攻克M个城堡并获得里面的宝物。但由于地理位置原因,有些城堡不能直接攻克,要攻克这些城堡必须先攻克其他某一个特定的城堡。你能帮ACboy算出要获得尽量多的宝物应该攻克哪M个城堡吗? Input每个测试实例首先包括2个整数,N,M.(1 <...转载 2018-08-25 10:28:02 · 115 阅读 · 0 评论 -
8月29日总结
最近练区间dp,对区间dp认识更进一步,通常的情况就是区间长度+起点+断点。首先要做的事是预处理,初始化数组,给它特定的含义,给定的意义不同,初始化数组不同,状态转移方程不同。首先要确定状态如何转移,接着初始化数组,然后写状态转移方程,循环进行第一次的时候是以后的基础,逐层进行,最终得到整个区间内的最值。题目通常是在一个区间内定义,让求最值,做过的题要多思考几遍吧,加深一下印象。把做的题总结一...原创 2018-08-29 20:47:05 · 162 阅读 · 0 评论 -
石子合并最大最小值(区间dp)
一条直线上摆放着一行共n堆的石子。现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆石子数记为该次合并的得分。请编辑计算出将n堆石子合并成一堆的最小得分和将n堆石子合并成一堆的最大得分 #include<stdio.h>#include<string.h>#include<iostream>using namespa...原创 2018-08-30 21:46:15 · 1537 阅读 · 1 评论 -
一堆石子合并(变环为线区间dp)
在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。试设计出1个算法,计算出将N堆石子合并成1堆的最小得分和最大得分. #include<iostream>#include<cstdio>#include<algorithm>#include<...原创 2018-08-31 21:34:06 · 136 阅读 · 0 评论 -
区间dp入门(HDU 4745 Two Rabbits)
Long long ago, there lived two rabbits Tom and Jerry in the forest. On a sunny afternoon, they planned to play a game with some stones. There were n stones on the ground and they were arranged as a cl...原创 2018-09-01 21:06:58 · 137 阅读 · 0 评论 -
区间dp(变环为链)
在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记。因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗能量珠的头标记为m,尾标记为r,后一颗能量珠的...原创 2018-09-02 18:22:43 · 461 阅读 · 0 评论 -
数位dp入门(Amount of Degrees)
图片来源:https://wenku.baidu.com/view/d2414ffe04a1b0717fd5dda8.html Create a code to determine the amount of integers, lying in the set [X; Y] and being a sum of exactly K different integer degrees of B...原创 2018-09-05 14:59:46 · 286 阅读 · 0 评论 -
9月6日总结
今天,上课效率比较高,天气很好。原创 2018-09-06 23:26:27 · 117 阅读 · 0 评论 -
数位dp入门(第几个含有666的数)
求第n个含有666的数。#include<iostream>#include<math.h>#include<stdio.h>#include<algorithm>#include<string.h>#include<vector>#include<queue>#include<m原创 2018-09-08 09:28:59 · 345 阅读 · 0 评论 -
数位dp入门(含有49)
题意:1-n之间共有多少个含有49的数/*The counter-terrorists found a time bomb in the dust. But this time the terrorists improve on the time bomb. The number sequence of the time bomb counts from 1 to N. If the cur...原创 2018-09-08 11:14:42 · 223 阅读 · 0 评论 -
9月12日总结
数位dp感觉还是只会某一个题目或者说是某一类,碰见别的类型又是一脸茫然,感觉就是没真切体会到它的思想,还需要一定时间吧,多问问身边的人,自己学肯定是没什么进步,也许别人一句话就可以点通的事自己花费很长时间也很难理解。还是需要多付出把,关键是弄明白。...原创 2018-09-12 22:05:32 · 149 阅读 · 0 评论 -
看了一下午才看懂的状压dp入门题 poj 3254 状态压缩dp
题目大意:农夫有一块地,被划分为m行n列大小相等的格子,其中一些格子是可以放牧的(用1标记),农夫可以在这些格子里放牛,其他格子则不能放牛(用0标记),并且要求不可以使相邻格子都有牛。现在输入数据给出这块地的大小及可否放牧的情况,求该农夫有多少种放牧方案可以选择(注意:任何格子都不放也是一种选择,不要忘记考虑! 补两张图:来自大佬博客:https://blog.csdn.net/he012/a...原创 2018-09-29 19:31:42 · 338 阅读 · 0 评论