【动态规划】Vijos P1680 距离】的更多相关文章

题目链接: https://vijos.org/p/1680 题目大意: 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb_c_”,“_a_bcbcd_”和“abcb_c_”都是X的扩展串,这里“_”代表空格字符.如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么我扪定义字符串A1与B1的距离为相应位置上的字符的距离总和,而两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而…
题目 背景 简单的DP 描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb_c_”,“_a_bcbcd_”和“abcb_c_”都是X的扩展串,这里“_”代表空格字符. 如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么我扪定义字符串A1与B1的距离为相应位置上的字符的距离总和,而两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而空格字符与其他任意字符之间的距离为已知的定…
1.        资源问题1-----机器分配问题F[I,j]:=max(f[i-1,k]+w[i,j-k]) 2.        资源问题2------01背包问题F[I,j]:=max(f[i-1,j-v]+w,f[i-1,j]); 3.        线性动态规划1-----朴素最长非降子序列F:=max{f[j]+1} 4.        剖分问题1-----石子合并F[i,j]:=min(f[i,k]+f[k+1,j]+sum[i,j]); 5.        剖分问题2-----多…
1.        资源问题1 -----机器分配问题 F[I,j]:=max(f[i-1,k]+w[i,j-k]) 2.        资源问题2 ------01背包问题   F[I,j]:=max(f[i-1,j-v]+w,f[i-1,j]); 3.        线性动态规划1 -----朴素最长非降子序列   F:=max{f[j]+1} 4.        剖分问题1 -----石子合并 F[i,j]:=min(f[i,k]+f[k+1,j]+sum[i,j]); 5.       …
容错声明: ①题目选自https://acm.ecnu.edu.cn/,不再检查题目删改情况 ②所有代码仅代表个人AC提交,不保证解法无误 E0001  A+B Problem First AC: 2017-10-13       Latest Modification: 2018-02-28 #include<bits/stdc++.h> using namespace std; int a,b; int main() { cin>>a>>b; cout<<…
链接:https://vijos.org/p/1002 题意:一条长度为L(L <= 1e9)的桥上有N(1<= N <= 100)颗石头.桥的起点为0终点为L.一只青蛙从0开始跳,每次跳的长度在s,t(1<= s <= t <= 10)之间.问青蛙过河最少踩到的石头的数量? 思路:区间dp的感觉很强烈..但是范围实在是太大了.并且有一种感觉就是当两颗相邻的石头之间的距离相距很远时,其中间的很大一段其实状态只是一个递推的关系,即只是传递,并没有改变一段区间的状态.并且有…
题目链接: https://vijos.org/p/1218 题目大意: 一个N个数的环,分成M块,块内的数求和%10,最后每块地值累乘,求最大和最小. n(1≤n≤50)和m(1≤m≤9)太小了可以随便搞. 题目思路: [动态规划] 区间DP.环形DP.断环为链,在后面补一段N,当链做. f[i][j]表示前I个数分成M块的最大值,g[i][j]为最小值.需要枚举从哪个点L开始向后取N位. 再枚举当前这一块的开头位置K. // //by coolxxx //#include<bits/stdc…
题目链接: https://vijos.org/p/1493 题目大意: 二取方格数,从(1,1)向下或向右走到(n,m)走两次,每个走到的格子值只能被取一次所能取到的最大值. (n,m<=50) 题目思路: [动态规划] f[i][j][k][l]表示第一次走到(i,j)第二次走到(k,l)的最大值. 分别向上或向左转移. // //by coolxxx //#include<bits/stdc++.h> #include<iostream> #include<alg…
题目链接: https://vijos.org/p/1143 题目大意: NxN的矩阵,每个值只能取一次,从(1,1)走到(n,n)走三次能取得的最大值. 题目思路: [动态规划] f[x1][y1][x2][x3]表示第一次走x1,y1,相同步数下第二次走x2,y2,第三次走x3,y3的最大值. 因为步数一样y2,y3可以直接求出来. // //by coolxxx //#include<bits/stdc++.h> #include<iostream> #include<…
题目链接: https://vijos.org/p/1616 题目大意: 卒从(0,0)走到(n,m),只能向下或向右,不能被马一步碰到或走到马,有几种走法. 题目思路: [动态规划] 把马控制的地方全部标记,接下来DP,f[i][j]=f[i-1][j]+f[i][j-1]; // //by coolxxx //#include<bits/stdc++.h> #include<iostream> #include<algorithm> #include<stri…
题目链接: https://vijos.org/p/1616 题目大意: 长度为N的字符串,只含‘j’和‘z’,可以将任意两个字符调换K次,求能够拥有的最多的'jz'串. 题目思路: [动态规划] 首先相同字符是不用调换的,一个字符最多被调换一次(a<—>b,b<—>c等价于a<—>c) f[i][j][z]表示前i个字符,改变了j个'j'和z个'z'后的“jz”串数. 那么只考虑前两位,有四种情况(jj,jz,zj,zz)来转移. 注意初始化!!! // //by c…
题目链接: https://vijos.org/p/1111 题目大意: 多组数据,给两个字符串s1,s2,求把s1,s2拆开从前往后合并后最短是多少 apple + peach = appleach ananas  + banana = bananas pear + peach = pearch 题目思路: [动态规划] 先求最长公共子序列,f[i][j]表示s1匹配到第i位,s2匹配到第j位的最多重叠字母数. 最终答案=len(s1)+len(s2)-f[len(s1)][len(s2)]…
题目链接: https://vijos.org/p/1028 题目大意: 给N个字符串(N<=2000),求能组成词链的单词最多有几个. 如果在一个由一个词或多个词组成的表中,除了最后一个以外,每个单词都被其后的一个单词所包含 即前一个单词是后一个单词的前缀,则称词表为一个词链.例如下面单词组成了一个词链: i int integer 但下面的单词不组成词链: integer intern 题目思路: [动态规划][二分][最长上升子序列] 二分查找最长可达的长度. // //by coolxx…
题目链接: https://vijos.org/p/1412 题目大意: 求01背包的前K优解,要求必须装满(1<=K<=50 0<=V<=5000 1<=N<=200) 题目思路: [动态规划] f[j][k]表示花费为j的第k优解.一开始全部赋为负值,f[0][1]=0,通过k优解转移得到新的k优解,和原来的比较后更新k优解.合并的过程用归并. // //by coolxxx ////<bits/stdc++.h> #include<iostrea…
题目链接: https://vijos.org/p/1313 题目大意: m(m<=32000)金钱,n(n<=60)个物品,花费vi,价值vi*ci,每个物品可能有不超过2个附件,附件没有附件. 题目思路: [动态规划] 01背包.因为至多2个附件,且附件没有附件,所以可以直接枚举4种情况. // //by coolxxx ////<bits/stdc++.h> #include<iostream> #include<algorithm> #include…
题目链接: https://vijos.org/p/1104 题目大意: T时间,n个物品,每个耗时ti,可获得收益ci,求最大收益. 题目思路: [动态规划] 01背包裸题.一维二维都过了,放个一维吧. // //by coolxxx ////<bits/stdc++.h> #include<iostream> #include<algorithm> #include<string> #include<iomanip> #include<…
题目链接: https://vijos.org/p/1037 题目大意: 给n块砖的长度(n<=100),问从中任选m块砖能否建成2个相同高度的塔. 能的话求最高高度,不能输出 Impossible . 题目思路: [动态规划] 想了好久f[i][j]表示前 i 块砖较矮的塔高度为 j 时 塔的差距,结果发现推不出状态. 后来改了,f[i][j]表示前 i 块砖差距为 j 时 较矮的塔的高度,那么有4种情况. ①不取  ②取完放到高的  ③取完放到矮的但是矮的依旧矮  ④取完放到矮的矮的变成高的…
题目链接: https://vijos.org/p/1011 题目大意: 给一张N*M的地图(N,M<=500),可从任一点开始沿上下左右走,只能走比当前低的地方.问最长能走多少格. 题目思路: [动态规划] 这题就是滑雪,动态规划. 将高度排序后从低往高算,当前高度所在的格子上下左右比当前高度低就可以用来更新答案. // //by coolxxx // #include<iostream> #include<algorithm> #include<string>…
扫雷 描述 相信大家都玩过扫雷的游戏.那是在一个n*n的矩阵里面有一些雷,要你根据一些信息找出雷来.万圣节到了,“余”任过流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和他8连通的格子里面雷的数目.现在棋盘是n*2的,第一列里某些格子是雷,而第二列没有雷,如:o 1* 2* 3* 2o 2* 2* 2 ('*'代表有雷,'o'代表无雷)由于第一类的雷有可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息求第一列雷有多少中摆放方案. 格式 输…
背景 顺治帝福临,是清朝入关后的第一位皇帝.他是皇太极的第九子,生于崇德三年(1638)崇德八年八月二ten+six日在沈阳即位,改元顺治,在位18年.卒于顺治十八年(1661),终24岁. 顺治即位后,由叔父多尔衮辅政.顺治七年,多尔衮出塞射猎,死于塞外.14岁的福临提前亲政.顺治帝天资聪颖,读书勤奋,他吸收先进的汉文化,审时度势,对成法祖制有所更张,且不顾满洲亲贵大臣的反对,倚重汉官.为了使新兴的统治基业长治久安,他以明之兴亡为借鉴,警惕宦官朋党为祸,重视整饬吏治,注意与民休息,取之有节.但…
背景 你知道吗,SQ Class的人都很喜欢打CS.(不知道CS是什么的人不用参加这次比赛). 描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分子要炸掉藏在A区的SQC论坛服务器!我们SQC的人誓死不屈,即将于恐怖分子展开激战,准备让一个人守着A区,这样恐怖分子就不能炸掉服务器了.(一个人就能守住??这人是机械战警还是霹雳游侠?)但是问题随之出现了,由于DustII中风景秀丽,而且不收门票,所以n名反恐精英们很喜欢在这里散步,喝茶.他们不愿意去单独守在荒无人烟的A区,在指挥官的一再命令…
描述 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标记.因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量.如果前一颗能量珠的头标记为m,尾标记为r,后一颗能量珠的头标记为r,尾标记为n,则聚合后释放的能量为(Mars单位),新产生的珠子的头标记为m,尾标记…
描述 N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形. 合唱队形是指这样的一种队形:设K位同学从左到右依次编号为1,2…,K,他们的身高分别为T1,T2,…,TK, 则他们的身高满足T1<...<Ti>Ti+1>…>TK(1<=i<=K). 你的任务是,已知所有N位同学的身高,计算最少需要几位同学出列,可以使得剩下的同学排成合唱队形. 格式 输入格式 输入的第一行是一个整数N(2<=N<=100),表示同学的总…
题目描述 设有字符串X,我们称在X的头尾及中间插入任意多个空格后构成的新字符串为X的扩展串,如字符串X为”abcbcd”,则字符串“abcb□cd”,“□a□bcbcd□”和“abcb□cd□”都是X的扩展串,这里“□”代表空格字符. 如果A1是字符串A的扩展串,B1是字符串B的扩展串,A1与B1具有相同的长度,那么我扪定义字符串A1与B1的距离为相应位置上的字符的距离总和,而两个非空格字符的距离定义为它们的ASCII码的差的绝对值,而空格字符与其他任意字符之间的距离为已知的定值K,空格字符与空…
严厉的班长 描述 木姑娘在班级里面是班长.虽然是副班长,却有着比正班长更高的威信,并深受小朋友们的爱戴. 每天眼保健操时间,木姑娘都要监督所有小朋友认真做眼保健操.整个过程被描述为n个时间段,第i个时间段内对于揉捏穴位的速度被要求为a[i]. 如果某一位小朋友在n个时间段内,速度分别为b[1],b[2],...,b[n],则他的最终得分为 score = |a[1]-b[1]| + |a[2]-b[2]| + ... + |a[n]-b[n]|. 分数越大,则说明表现越差,如果b[1]到b[n]…
非常奇怪的是,我在Vijos 1071能AC,在caioj 就只有50分 可以和前面一道题一样算方案,如果大于1就是多解 然后就输出方案就好了 #include<cstdio> #include<cstring> #define REP(i, a, b) for(int i = (a); i < (b); i++) using namespace std; const int MAXN = 112; const int MAXM = 212345; int w[MAXN],…
题意:中文题.不说了. 注意一些地方,机器的执行过程是没有顺序的,而且每个机器可以用多次.第一次执行的机器不消耗转移时间K. 用dp[i][j]表示第i个机器完成第j个步骤的最短时间,sum[j][i]表示第i个机器完成前j个步骤的时间. 比较容易想到一个朴素的状态转移方程: dp[i][j]=min{dp[k][j']+sum[j][i]-sum[j'][i]}+K  (j-j'<l),(i!=k) 这里状态是O(n*m),转移是O(n*l),一定会超时,需要优化. 方程变形得dp[i][j]…
复制上一题总结 caioj 1069到1071 都是最长公共字序列的拓展,我总结出了一个模型,屡试不爽    (1) 字符串下标从1开始,因为0用来表示字符为空的情况,而不是第一个字符     (2)初始化问题.         一般设f[i][j]为第一个字符前i个,第二个字符前j个的最优价值          f[0][0] = 0           然后要初始化f[i][0], f[0][i]      这个时候要根据题意.          这个时候就是一个字符有,一个字符空的情况  …
http://www.lydsy.com/JudgeOnline/problem.php?id=1065 https://vijos.org/p/1826 好难的题啊TWT ∈我这辈子也想不出来系列~ 题解详见2009年的论文徐源盛<对一类动态规划问题的研究>. 这道题我第一眼一脸懵逼... 然后持续懵逼... 最后看论文里的题解 我再来重复一下(论文绝对比我讲得详细QAQ) 首先\(R(i)=C_i+k\sum_\limits{j=1}^wR(p_j)\) 如果是单纯的一棵树,那么从孩子传到…
链接:https://www.vijos.org/p/1002 解析: 若 p*x+(p+1)*y=Q(採用跳跃距离p和p+1时能够跳至不论什么位置Q),则在Q ≥ P*(P-1)时是一定有解的. 因为题目给出的一个区间是1≤S≤T≤10,于是当相邻的两个石子之间的距离不小于8*9=72时,则后面的距离都能够到达.我们就能够觉得它们之间的距离就是72. 如此一来,我们就将原题L的范围缩小为了100*72=7200,动态规划算法全然能够承受了. 可是当S=T时,上述等式是无法使用的,在这样的情况下…