习题:就是干(DP)】的更多相关文章

链接: https://www.acwing.com/problem/content/279/ 题意: 圣诞老人共有M个饼干,准备全部分给N个孩子. 每个孩子有一个贪婪度,第 i 个孩子的贪婪度为 g[i]. 如果有 a[i] 个孩子拿到的饼干数比第 i 个孩子多,那么第 i 个孩子会产生 g[i]*a[i]的怨气. 给定N.M和序列g,圣诞老人请你帮他安排一种分配方式,使得每个孩子至少分到一块饼干,并且所有孩子的怨气总和最小. 思路: 先考虑贪心,怨气较大的人得到的饼干肯定较多. 可以先进行排…
Cake Slicing 题意:有一个n行m列的网格上有一些黑点,要求进行切割,使最后每块上只有一个黑点,求最少的刀数 思路:记忆化搜索,枚举每一条边来切,每一次搜索自己所能切割的所有情况取最小值 但是TL,纠结了一下,发现明明2个for(横+竖)就能切出来,硬是被我写成了n^2 的,自己好坑- - #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> usin…
辣鸡军训毁我青春!!! 因为在军训,导致很长时间都只能看书yy题目,而不能溜到机房鏼题 于是在猫大的帮助下我发现这道习题是数位dp 然后想起之前讲dp的时候一直在补作业所以没怎么写,然后就试了试 果然dp的代码比数据结构题短到不知道哪里去了,而且1A,爽啊 #include <cstdio> ,T,n,m; ][][]; int main() { for(scanf("%d",&T);t<=T;t++) { scanf("%d%d",&am…
洛谷2301 题目描述 眼看着老师大军浩浩荡荡的向机房前进.LOI 的同学们决定动用自己的力量来保卫他们的好朋友loidc.现在每个人都要挑选自己的武器——两根木棍.一根用做远距离投掷,另一根用做近距离搏斗.每个人都想挑到最好的,但这是不可能的.但是为了让多数人满意,也为了减少大家的矛盾.cony设计了一个矛盾指数,这个指数就是每个人的不舒服指数和,不舒服指数就(L1-L2)^2,其中L1,L2分别是两根木棍的长度. cony决定让矛盾指数最少,于是他来向你寻求帮助,希望你能告诉他矛盾指数至少有…
链接:https://ac.nowcoder.com/acm/contest/992/B来源:牛客网 题目描述 在之前很火的一个动漫<干物妹小埋>中,大家对小埋打游戏喝可乐的印象十分的深刻. 现在欧尼酱将小埋的快乐水全部分开藏在了家具的顶端. 小埋使出空中1080°转身接战术翻滚跳到任一家具上,她相信,只要她翻滚的足够快,欧尼酱就跟不上她.   1.为获取梦幻开局,小埋一套技能可以使她一开始掉落在任一家具上. 2.小埋家的家具按顺序给出,每个家具可跳可不跳,为避开欧尼酱的追击,小埋翻滚到某个家…
听闻noip要考树形DP,本蒟蒻万分惶恐,特刷一坨题目,以慰受惊之心. codevs 1486 /*和非常出名的"选课"是一个题*/ #include<cstdio> #include<iostream> #include<cstring> #define N 1010 using namespace std; ],f[N][N],v[N],n,m,flag; int dfs(int x,int y) { )return f[x][y]; ||y&l…
烽火传递[题目描述]烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上.一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情.在某两座城市之间有n个烽火台,每个烽火台发出信号都有一定的代价.为了使情报准确的传递,在m个烽火台中至少要有一个发出信号.现输入n.m和每个烽火台发出的信号的代价,请计算总共最少需要花费多少代价,才能使敌军来袭之时,情报能在这两座城市之间准确的传递!!![输入描述]第一行有两个数n,m(1<=n,m<=1000000)分别表示n个烽火台…
想了很久, 以为是网络流最大流, 后来建模建不出来, 无奈. 后来看了 https://blog.csdn.net/hao_zong_yin/article/details/79441180 感觉思路很巧妙. 首先题目等价于让每条边经过的次数最多. 那么假设一条边点a到点b, 假设以b为根节点的子树中的节点数为pb, 那么剩下的 以以b为根节点的子树中的节点数为pa 我们假设pa > pb 那么从a这边去b这边, 最多只能走pb次, 因为不能到同一个点,b那边最多就pb个点 如果经过次数大于pb…
前言 感觉可以用单调队列优化dp的模型还是挺活的,开个随笔记录一些遇到的比较有代表性的模型,断续更新.主要做一个收集整理总结工作. 记录 0x01 POJ - 1821 Fence,比较适合入门的题,写出转移方程后可以比较容易的看出决策变量的取值范围的界是单调变化的,以及价值拆开之后也是单调的 #include<iostream> #include<cstdio> #include<algorithm> #define dd(x) cout<<#x<&…
问题描述 蒜头君酷爱搭积木,他用积木搭了 n 辆重量为 wi的小车和一艘最大载重量为 W 的小船,他想用这艘小船将 n 辆小车运输过河.每次小船运载的小车重量不能超过 W.另外,小船在运载小车时,每辆小车会对小船有一个损坏值si,当多辆小车一起运载时,该趟运载对小船的损坏值为船上所有小车的最大损坏值.现在蒜头君想知道,如何用小船运载 n 辆小车,可以使得对小船造成的总损坏值最小.输入格式第一行输入两个数 W 和 n(100≤w≤400,1≤n≤16),分别表示小船的最大载重量和小车总数.接下来输…
一.简单基础dp 这类dp主要是一些状态比较容易表示,转移方程比较好想,问题比较基本常见的.主要包括递推.背包.LIS(最长递增序列),LCS(最长公共子序列),下面针对这几种类型,推荐一下比较好的学习资料和题目. 1.递推: 递推一般形式比较单一,从前往后,分类枚举就行. 简单: hdu 2084 数塔 简单从上往下递推 hdu 2018 母牛的故事 简单递推计数 hdu 2044 一只小蜜蜂... 简单递推计数(Fibonacci) hdu 2041 超级楼梯 Fibonacci hdu 2…
大佬真的强!!https://blog.csdn.net/u014800748/article/details/45225881 #include<cstdio> #include<cstring> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; typedef long long ll; const int MAXN = 70; int mod[MAXN], n, k; ll…
仅收录有意思的题目 数的划分 导弹拦截 : LIS的两种优化 教主的花园:将不同的情况分类,最后取max 午餐 & 挂饰: 需要排序 挂饰:0-1背包处理负数体积 投资的最大效益 : 完全背包, n次 Piggy-Bank: 完全背包: 注意初始化 HDU 1059 Dividing : 多重背包: 樱花: 混合背包模板…
前言 复习笔记2nd. Warning:鉴于摆渡车是普及组题目,本文的难度定位在普及+至省选-. 参照洛谷的题目难度评分(不过感觉部分有虚高,提高组建议全部掌握,普及组可以选择性阅读.) 引用部分(如这个文本)为总结性内容,建议即使是跳过部分也进行阅读. 0--P3195[HNOI2008]玩具装箱 题目链接 怎么一上来就是紫题啊 题意 给定 \(C_i\) 表示每个物体长度,把 \(i\sim j\) 的物品放入一个容器中,容器的长度为 \(x=j-i+\sum_{k=i}^j C_k.\)…
更新中... http://poj.org/problem?id=1037 dp[i][j][0]表示序列长度为i,以j开始并且前两位下降的合法序列数目; dp[i][j][1]表示序列长度为i, 以j开始并且前两位上升的合法序列数目; 于是我们可以得到递推方程式:dp[i][j][0] += dp[i-1][k][1] ( 1 <= k < j ), dp[i][j][1] += dp[i-1][k][0] ( k <= j <= i), 然后我们就可以从第一位开始枚举了. ht…
预备知识 DP(Dynamic Programming):一种以无后效性的状态转移为基础的算法,我们可以将其不严谨地先理解为递推.例如斐波那契数列的递推求法可以不严谨地认为是DP.当然DP的状态也可以是二维/三维的,某一维的含义也不仅仅是指某个数列的第几项. 树状数组(BIT or fenwick tree):一种高效地动态维护一个序列并动态求取前缀和的数据结构.修改某个元素/求一次前缀和的时间复杂度均为O(logn) 2 LIS 好了现在假设你们都会打树状数组了(如果不会的话,baidu一发吧…
背景 小杉的幻想来到了经典日剧<死亡拼图>的场景里……被歹徒威胁,他正在寻找拼图(-.-干嘛幻想这么郁闷的场景……). 突然广播又响了起来,歹徒竟然又有了新的指示. 小杉身为新一代的汤浅,有责任带领大家脱离危险! (若对情节有任何疑问,请观看原剧) 描述 歹徒告诉小杉,他正在寻找的拼图块其实可以拼成N个 有顺序的 完整的拼图. 每个完整的拼图由若干个拼图块组成. 歹徒要求小杉把拼图按拼出的顺序划分成M个集合,一个拼图集合由若干个完整的拼图组成,并且总的拼图块的数目不超过T.并且,构成集合的拼图…
北大教你如何高效养牛(误)(点我查看)  2015-08-21: 问题的大意就是有一片稻田,里面有很多坑,你要在上面种稻谷,然后呢田里面还会养牛,牛不喜欢扎堆吃饭,所以呢你种的稻谷要间隔种在坑里面,所以一个种了稻谷的坑的上下左右4个坑都不能再种稻谷,而且呢,这些坑有些坑是贫瘠的,不能种稻谷(这不是坑爹吗,难道是有毒?),嗯,大概就是这样,现在那个问你给你一片田问你有多少个种植稻谷的方案 这个问题,看上去挺烦的,你又要想着如何不违反规定(种了田上下左右不能种田),还有些地不能种,还要算出最后的方案…
对于dp,我目前的理解就是,干成题目中的那件事需要作出若干次决策,然后你要取其中最优的结果,我们可以用深搜来递归地找最优解,然后我们来观察一下这个递归树的形状,如果它能从底往上直接递推的话,就不用递归了,直接递推迭代到结果.. 当你不知道哪个决策最优时,我的解决方法是,那我们就遍历所有决策,从中选择最优的,当你用深搜遍历所有决策时,题目中的条件或者你自己推的结论可以帮助你进行dfs剪枝  还有一种方法是,假设你能找到贪心的决策,每次就能贪心地选择某决策  并且,能DP的前提条件是顺序正确,你递推…
题目链接 能AC还是很开心的...此题没有POJ2778那么难,那个题还需要矩阵乘法,两个题有点相似的. 做题之前,把2778代码重新看了一下,回忆一下当时做题的思路,回忆AC自动机是干嘛的... 状态表示dp[i][j]长度为i的以j串为结束的最小改变数目.AC自动机预处理一下,然后DP. 卡内存+不知道状态数,MLE+RE+WA了多次. #include <iostream> #include <cstring> #include <cstdio> #include…
最优二叉查找树的一道思考习题 同最优二叉查找树一样,矩阵连乘问题也是一个卡特兰数问题(其动态规划的构造过程都很像) 分析解答: a,铺垫的数学知识首先要搞清楚矩阵相乘是怎么乘的: 1)对于连续的n个矩阵相乘 A1 * A2 *A3.........An,其乘法顺序可以是任意的,可以在上面加括号,改变做乘法的顺序,例如 A*B*C三个矩阵相乘可以A*(B*C) 也可以直接按从左到右的顺序.连续的两个矩阵的位数必须满足m*p,p*n才能相乘,且相乘后的结果是个m*n的矩阵.(线性代数的知识) 2)对…
问题 : [递归]油桶问题 题目描述 楚继光扬扬得意道:“当日华山论剑,先是他用黯然销魂掌破了我的七十二路空明拳,然后我改打降龙十八掌,却不防他伸开食指和中指,竟是六脉神剑,又胜我一筹.可见天下武学彼此克制,武学之道玄之又玄!……哎,谁用炒锅敲我头?” 楚继光的老妈大声骂道:“玩个石头剪刀布都说得这般威风,炒菜没油了,快给我去装!” “这么凶干嘛?不就吹吹牛嘛.”楚继光边嘟嘟囔囔边走进储藏室,看到储藏室有N个油桶都装 满了油,这N个油桶容积各不相同(容积为整数),楚继光需要M升油(M也为整数),…
http://acm.hdu.edu.cn/showproblem.php?pid=4374 去年多校的题 今年才做 不知道这一年都干嘛去了.. DP的思路很好想 dp[i][j] = max(dp[i-1][g]+sum[i][j]-sum[i][g-1],dp[i][j]) abs(g-j)<=t  不过复杂度是相当高的 所以呢 就出现了个单调队列 把它优化下 所谓的单调队列其实也就是一队列 始终保持着队头是最大的 若满足不了距离的条件 队头+1 队尾始终保持更新 让满足的了距离而且比队里的…
中文题目,题意就不说了. 不得不说这是一道十分经典的状态压缩DP的题目. 思路: 通过分析可以发现,第i行的格子能不能放大炮仅与第i-1和i-2行的放法有关,而与前面的放法无关,因此,如果我们知道了i-1行和i-2放的状态,那么,我们就可以推出第i行的可行的放法状态.因此可以看出i行的状态由它上面两行决定. 设dp[i][j][k]表示前i行,第i行用第j个状态放,第i-1行用第k个状态放的最大大炮的个数,那么状态转移方程就是:dp[i][j][k] = max(dp[i][j][k],dp[i…
1233: [Usaco2009Open]干草堆tower Description 奶牛们讨厌黑暗. 为了调整牛棚顶的电灯的亮度,Bessie必须建一座干草堆使得她能够爬上去够到灯泡 .一共有N大包的干草(1<=N<=100000)(从1到N编号)依靠传送带连续的传输进牛棚来.第i包干草有一个 宽度W_i(1<=w_i<=10000).所有的干草包的厚度和高度都为1. Bessie必须利用所有N包干草来建立起干草堆,并且按照他们进牛棚的顺序摆放.她可以相放多少包就放 多少包来建立起…
近期情绪太不稳定了.可能是由于在找实习这个过程碰壁了吧.第一次面试就跪了,可能是我面的是一个新公司,制度不完好,我感觉整个面试过程全然不沾编程,我面试的还是软件开发-后来我同学面试的时候.说是有一道数学题了.最后都已经签了,orz...其它同学都陆续签了,有签了知乎.有签了猎豹的,有签了阿里的,我还在想着打比赛,作为一个快大四的人.我还想着打比赛.甚至我连队友都快没了-可是我还想坚持!到如今,我基本没课了,每天都仅仅能是刷刷题,写写python,搞搞shell,我都不知道我在干嘛-!有没有大神给…
无限背包dp.. 因为题目中说至少到 H 磅 , 我就直接把 H * 2 了.. -------------------------------------------------------------------------- #include<cstdio> #include<algorithm> #include<cstring> #include<iostream>   #define rep( i , n ) for( int i = 0 ; i…
IO流初学者在学习时都有一点迷糊,今天我们就讲讲IO流,希望通过讲解可以帮助大家 IO流分为字节流,字符流,缓冲流.我们只要记住这三个就可以了. 1*字节流有:字节输入流(FileInputStream),字节输出流(FileOutputStream). 2*字符流有:字符输入流(FileReader),当让也有字符输出流(FileWriter); 字节流>>字节输入流,无非就是读取文件,初学者可以这么认为,把文档的读取出来放在缓冲区里(假设有这个缓冲区)         >>字节…
就我的理解来说这个题,本质上是一个DP题,不应该说是搜索,因为我的做法是把表格中所有的数据都找到,使用队列暴力来遍历出所有状态,因为题目中的数据范围小,所有耗时也小. 首先分析箱子是一个被动物体,人是主动物体,箱子的移动取决于人的移动,所以在bfs中只需要让人去移动,进而带动箱子就可以了.我们使用dp[x1][y1][x2][y2]来记录状态,分别代表人和箱子的位置.在队列实现DP的过程中,我们必须要把当前所在的情况标记为未走过,这个很重要.有人可能会质疑,这样可能导致无限的入队列,导致死循环,…
动态规划(简称dp),可以说是各种程序设计中遇到的第一个坎吧,这篇博文是我对dp的一点点理解,希望可以帮助更多人dp入门. ***实践是检验真理的唯一标准,看再多文章不如自己动手做几道!!!*** 先看看这段话 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法.20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了…