随笔分类 - 暑假ACM集训第二周复习用整理
摘要:题目含义 从坐标0开始,每次可以从i到i+l与i+r之间的位置 每次到新的位置,都可以获得新的位置对应的数 问还差一步就能到大于n的位置时,获得的最大数字 题目分析 dp[i]=max(dp[i-r]...dp[i-l])+a[i] 每次找最大就开一个数组用单调队列就好了(或者用一个优先队列) 题目
阅读全文
摘要:题目含义 给出一堆数字,要求分成几个区间,并且每个区间的和不大于m,并求每个区间的最大值之和最小 题目分析 动态转移方程是dp[i]=dp[j]+max(a[j+1],a[j+2],...,a[i]) 可以理解为,一个长的数列的值等于一个短的数列的值加上剩下的数的最大值 但是,sum[i]-sum[
阅读全文
摘要:题目含义 给出n*n的地图和每次行走最长距离k,每次到达的数字必须大于原来的数字 问走一遍得到的数字最大是多少 题目分析 一个dfs就可以了 题目代码
阅读全文
摘要:题目含义 v个村庄要建p个邮局 现给出每个村庄的位置,并且邮局只能建在村庄的位置 问每个村庄到离它最近的邮局距离之和最小为多少 题目分析 区间dp[i][j]表示在前i个村庄建j个邮局的最小距离 dp[i][j]=min(dp[i][j],dp[k][j-1]+dis[k+1][j]) 这个状态方程
阅读全文
摘要:题目含义 不是完美匹配,找出匹配的括号数目 题目分析 括号匹配有两种,一种是括号里有括号(()),一种是括号在外面()() 所以如果s[i]与s[j]匹配,那么dp[i][j]=dp[i+1][j-1]+2 同时要不断在i与j之间找间隔点,找出最大的dp[i][k]+dp[k+1][j] 对我来说,
阅读全文
摘要:题目含义 给出一堆课的截止时间和完成需要的时间 每完成这门课的时间超过截止时间一天就扣一分 问怎么安排完成所有课扣掉的分最少 题目分析 可以看到课总共就不超过16个 假设有3门课,用111表示全部完成,000表示都没完成,于是这个题可以用状压dp完成 用dp[1]...dp[1<<n-1]表示n门课
阅读全文
摘要:题目含义 嗯。。。每种怪都有一个对应的经验值和忍耐度 问你能不能在有限的忍耐度和杀怪数之内得到升级所需的经验 如果能,输入升完级能保留的最大忍耐度 题目分析 如果没有杀怪数限制,就是一个将忍耐度看做背包容量,寻找忍耐度m能得到的最大经验值的完全背包 如果是给每个怪物限制一个杀怪数,那就是一个多重背包
阅读全文
摘要:题目含义 给出存钱罐空时和满时的重量,以及一些钱币的价值和重量 每种钱可以取无数次,问装满存钱罐的最小价值 题目分析 很明显,一个完全背包,并且要求刚好装满,又是求最小值,就可以将dp[i]除dp[0]以外赋为INF 题目代码
阅读全文
摘要:题目含义 找两个序列共有的,单调递增的,最大的子序列 题目分析 两个长序列的情况,可以由两个短的序列发展而来,也就是可以用动态分析 令dp[i][j]表示第一条序列到ai,第二条序列到bj,同时bj是公共子序列的最后一项时的公共子序列长度 如果a[i]!=b[j],那么dp[i][j]=dp[i-1
阅读全文
摘要:题目含义看了就能理解,一个人捡馅饼 题目分析 这和数塔的题做法一样 一个时间就是一层塔,11个位置就是一层塔有11个数 可以从塔底到塔顶dp,dp公式是dp[i][j]+=max(dp[i+1][j-1],dp[i+1][j],dp[i+1][j+1]) 题目代码
阅读全文

浙公网安备 33010602011771号