![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划题解
脆脆鲨.
栽一棵树最好的时间是十年前,其次是现在
展开
-
21.11.28周末总结(dp重要题解)
下面记录的是略有意义的题1、两个字符串比较,改值设A和B是两个字符串。我们要用最少的字符操作次数,将字符串A转换为字符串B。1、删除一个字符;2、插入一个字符;3、将一个字符改为另一个字符;①、f [ i ] [ j ] , 表示代表字符串A的前i个字符变为字符串B的前 j 个需要多少步②、赋初始值,求最少则赋大值 ;除此之外,每个取值都与上一步骤有关,因此要赋正确的值例如,A的第0个到B的第 j 个,最不理想就是要换 j 步③、删除:f (i-1,j)+1 // 把字符串原创 2021-11-28 21:20:43 · 291 阅读 · 0 评论 -
P7774 KUTEVI
虽然这个题想通过不难,但还是值得记录题意:题目描述给定 N 个角(第 i 个角记作 ai ),作为初始角,另给定 M 个角(第 i 个角记作 bi),作为目标角。请求出对于每个 bi,它是否能被若干个 ai之间的加、减运算得到。注意同一个 ai可以用多次,也可以不用。输入格式第一行两个正整数 N,M第二行 N 个正整数,第 i 个数为 ai第三行 M 个正整数,第 i 个数为 bi输出格式共 M 行,在第 i 行,如果 bi能被若干个 ai之间的加、减运算得到,输出YES,否则输出N原创 2021-11-22 00:04:24 · 361 阅读 · 0 评论 -
最短Hamilton路径(状态压缩DP)
哈密顿路径(带权无向图):走过的最短路径给定一张 n 个点的带权无向图,点从 0∼n−1 标号,求起点 0 到终点 n−1 的最短 Hamilton 路径。Hamilton 路径的定义是从 0 到 n−1 不重不漏地经过每个点恰好一次。输入格式第一行输入整数 n。接下来 n 行每行 n 个整数,其中第 i 行第 j 个整数表示点 i 到 j 的距离(记为 a[i,j])。对于任意的 x,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,x] 并且 a[x,y]+a[y,z]≥a[x,z原创 2021-10-05 23:21:09 · 596 阅读 · 0 评论 -
New Year and Domino
https://codeforces.com/problemset/problem/611/C题目大意:n行m列,q次询问,然后问询问区间内 左右两连点 和上下两连点有多少个。最大的矩形前缀和就等于蓝的矩阵加上绿的矩阵,再减去重叠面积,最后加上小方块,即sum[i][j] = sum[i][j - 1] + sum[i - 1][j] - sum[i - 1][j - 1] + a[i][j]...原创 2021-04-25 00:20:20 · 381 阅读 · 1 评论 -
You Are The One
n个人参加节目,每人都有一个自己的不高兴值如果他第k个上场,那么他的不高兴值为(k−1)∗a[i]第 k 个等待的人不高兴值成 ( k - 1 ) * a[i],有一个小黑屋可以暂时存放一些人,让他们晚点上台,进去的越早出来的越晚,但显然越晚,不高兴值越大,求最小的总不高兴值。那么第i个人可以在第一个、第二个位置等等出场…直到j+i-1我们用d[i][j]来存储第i个人到第j个人能得到的最小的不高兴值假设第i个人的花费是k∗a[i],则它在这一区段中是第k+i个上场的(以i开始的)那么就可以分两原创 2021-04-22 20:28:34 · 191 阅读 · 0 评论 -
Making the grade 和Sonya and Problem Wihtout a Legend
不严格递增给出一个长度为 n 的序列,可以给任意数增加或减去任意数,要求使序列变为非递减序列(不严格上升),ai数值的大小不超过1e9,问花费的最少代价是多少首先要找到循环的条件i和j,这个题有长度,还有数值大小。所以应该是长度为前 i 个数构成的序列,且最大值为 j 的花费d[i][j]。因为ai的数值太大,二维数组一定会超时,所以采用离散化思想,用数组b来代替对应的数字,然后进行排序。此时的ai是原本的数列,bi是升序排序后的数列。所以这时候的d[i][j]就是前i个数进行操作后最大值不超过b[原创 2021-04-17 21:21:46 · 112 阅读 · 0 评论 -
Mashmokh and ACM
如果一个数列中,后一个数都能被前面一个数整除,那么就叫这个数列为好数列。输入n,k,求数列中最大元素为n,数列长度为k的好数列的总个数(答案对1000000007取模)先确定状态转移方程的两个元素,一个是最大元素,一个是数列的长度,所以用二维数组。然后抓住关键点,一个数可以被它后面的数整除,所以需要一个新的循环来判断可以整除它的又有哪些。我们以数列长度为主体,假如以x结尾的且长度为3,那它就可以去找长度为2时的x可以整除的数,相当于把x加到了上一组长度为2数的屁股后面变长度为3。如图所示d[i]原创 2021-04-16 23:52:39 · 227 阅读 · 0 评论 -
FatMouse‘s Speed
https://vjudge.net/contest/430905#problem/C给出猫的体重和对应的速度,要求是得到一个体重上升的子序列的同时,速度必须是严格下降的序列。请输出最长的这样的子序列,并且输出这些猫的原本的序号。我们需要一个结构体来记录猫的体重,速度和序号。按照速度下降来排序,最后转化成了求体重的最长上升子序列。这答案多种,取任意一个即可。#include<iostream>#include<algorithm>using namespace std;原创 2021-04-07 13:01:34 · 1577 阅读 · 2 评论 -
Tickets
卖票问题,可以一张一张卖,也可以卖一对,给出分别的时间,问怎样卖的最快 for(int i=1; i<=n; i++) { cin >> a[i];//单个人卖的时间 } for(int i=1; i<n; i++) { cin >> b[i];两张一起卖的时间 } d[0]=0; d[1]=a[1原创 2021-04-05 23:34:25 · 118 阅读 · 2 评论 -
Dynamic Programming?老牛吃药
https://vjudge.net/contest/430905#problem/A医生给牛吃药,使牛可以跳起来,跳到他想去的地方,从零开始,奇数次的时候是得到格子里的能量,偶数次是失去能量。可以间隔跳。问它最大能得到多少能量。我实在是不懂动态规划,一开始只能想到判断一个数的两边是不是都比他大,或者都小,才能得到最值。不贴这个代码了。还是说下别人写的吧。又是用了一个二维数组,一行储存偶数时候的值,另一行储存奇数时候的值。...原创 2021-04-04 16:37:37 · 106 阅读 · 0 评论 -
动态规划题解一
一、连续的1、最大连续子序列给出一串数字,求其连续的最大和。因为需要标记这一子序列的开头和结尾,就没用公式写。也算是分解成小问题,用一个中间量来标记当前这一段的和,如果当前这一段一直大于零,就可以加,否则就换一个开头,然后一直更新最大值。二、可以间断的子序列1、最长公共子序列给出两个字符串,让你比较最长的相同的字符的个数这是一个二维问题,就需要一个二维的数组来标记,其实就是把行坐标表示成第一段字符串,纵坐标表示成另一端,然后每个小格都比较行列是否相同,相同的话就取这一对角线上上一个值再加一,否原创 2021-04-03 20:33:31 · 1033 阅读 · 7 评论