动态规划
liuliu2333
这个作者很懒,什么都没留下…
展开
-
最长公共子序列(动态规划)
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。比如两个串为:abcicbaabdkscabab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。Input第1行:字符串A第2行:字符串B(A,B的长度 <= 1000)Output输出最长的子序列,如果有多个,随意输出1个。Sample InputabcicbaabdkscabSam...原创 2018-05-16 18:30:40 · 263 阅读 · 0 评论 -
hdu2476 String painter (区间dp)
题意:给个a,b两个字符串,刷a,一次可以将一个区间刷成一个字母,求最小的操作次数将a串变为b串。深深的感受到被dp支配的恐惧,,,这道题真不好想。。。看题解看了好久才看明白(菜哭原创 2018-10-12 23:38:09 · 125 阅读 · 0 评论 -
P1091 合唱队形(dp)
https://www.luogu.org/problemnew/show/P1091题意就是求最长的先上升后下降的子序列(可以不上升也可以不下降)。这道题给我个深刻的教训,好好看题!!好好看题!!原本理解错了,以为要对称的上升和下降,WA出一片天。 #include<bits/stdc++.h> using namespace std; int a[106],b[1...原创 2018-09-28 11:43:23 · 137 阅读 · 0 评论 -
P1280 尼克的任务(dp)
https://www.luogu.org/problemnew/show/P1280题意:给了k个时间段不能重叠,求能得到的最大的空余时间。状态转移方程: 这个时间段没工作 dp[i]=dp[i+1]+1 有工作 dp[i]=max(dp[i],dp[i+p[w].y])#include<bits/stdc++.h>usin...原创 2018-09-29 21:56:16 · 179 阅读 · 0 评论 -
Cake (凸包+区间dp)
题意:一个多边形先是确定是否是凸多边形,可以用凸包模板来判断。然后是求最小的切割价值。最小切割价值用区间dp来求解dp【i】【j】=min(dp【i】【j】,dp【i】【k】+dp【k】【j】#include<bits/stdc++.h>using namespace std;int dp[306][306];double add(double a,double b)...原创 2018-10-09 16:58:58 · 186 阅读 · 0 评论 -
LightOJ1079---Just another Robbery(01背包)
题意:抢银行,一共有n个银行,每个银行可以抢v【i】的钱,被抓的概率是m【i】。问在低于P概率的情况下,最多能抢多少钱。思路;01背包dp【i】存的是抢到【i】钱不被被抓的概率。1-dp【i】就是被抓的概率。#include<stdio.h>#include<string.h>#include<algorithm>#include<iost...原创 2018-10-16 16:22:30 · 100 阅读 · 0 评论 -
POJ 2955 Brackets (区间DP)
题意:求最长的括号匹配子序列。区间dp基础题,将k设为在i~j与i匹配的结点,则dp【i】【j】=dp【i+1】【k-1】+dp【k+1】【j】+1;i与k匹配是+1,再加上中间的区间和右边的区间。这道题很好的让我理解了一下区间dp的运作。果然多刷题才是王道(以前一直理解不清///#include<stdio.h>#include<string.h>#...原创 2018-10-10 16:39:31 · 125 阅读 · 0 评论 -
POJ1651:Multiplication Puzzle (区间dp)
题意:一串数列,除了开头和结尾,每次取一个数,然后+上a【i-1】*a【i】*a【i+1】的价值,然后让求出最小的价值。区间dp的经典题,这个k的值代表的是最后取的数,然后将区间划分为3部分dp【i】【k】+dp【k】【j】+a【i】*a【k】*a【j】。#include<stdio.h>#include<iostream>#include<string...原创 2018-10-10 21:58:00 · 188 阅读 · 0 评论 -
HDU 4283 You Are the One【区间dp】
题意:n个人排成一排,每个人轮流上场,第i个人上场有(i-1)*a【i】的愤怒值,有一个小黑屋,你可以把人塞进去,先进的后出来,求最小的愤怒值。dp不亏是dp真难(可能是我太菜了。。。感觉写了不少了但还是很难自己写出来,菜哭题解;区间dp,断点k代表的是第i个人第几次出场。dp【i】【j】=min(dp【i】【j】,dp【i+1】【i+k-1】+(k-1)*a【i】+dp【i+k】【j...原创 2018-10-29 21:33:59 · 98 阅读 · 0 评论 -
ZOJ - 3469 Food Delivery (区间dp)
题意:一条在x轴的路,一个饭店(起始点)和n个顾客,每个人都有一个抱怨值随时间累加,求最小的抱怨值。巨难啊。。。不会啊。。。区间dp【i】【j】【0/1】0代表在左边停下,1在右边停下,dp【i】【j】【0】可以从dp【i+1】【j】【0/1】转移到dp【i】【j】【1】可以从dp【i】【j-1】【0/1】转移到,#include<stdio.h>#include&...原创 2018-11-05 22:02:53 · 105 阅读 · 0 评论 -
hdu 2089 不要62【数位dp】
题意:给定一个范围n~m,求出数中不存在4和连续62的数的个数。数位dp经典入门题。#include<bits/stdc++.h>using namespace std;#define ll long longint digit[20];ll dp[20][2];ll dfs(int len,bool if6,bool limit){ if(len==0) re...原创 2018-11-17 19:22:49 · 170 阅读 · 0 评论 -
P1064 金明的预算方案 (dp)
https://www.luogu.org/problemnew/show/P1064题意:和开心的金明不一样的是有附属关系,#include<bits/stdc++.h>using namespace std; int dp[33000],w[100],w1[100],w2[100]; int e[100],e1[100],e2[100];int main(){...原创 2018-09-22 11:21:36 · 135 阅读 · 0 评论 -
P1880 [NOI1995]石子合并(区间dp)
https://www.luogu.org/problemnew/show/P1880题意:一串环形的数,每相邻的两个数可以合并,加上价值,价值是两个数的和,求最大和最小价值。思路:区间dp板子,有一点要注意因为是环形的数,首位和末尾也是可以合并的,因此可以将原数组,再往后加一遍。就变成链型的了。#include<bits/stdc++.h>using namesp...原创 2018-10-02 16:03:27 · 149 阅读 · 0 评论 -
P1020 导弹拦截(dp)
https://www.luogu.org/problemnew/show/P1020题意:就是求最长上升子序列#include<bits/stdc++.h>using namespace std;#define ll long longint b[100060],a[100060],dp[100060],d[100060];int main(){ int i=0...原创 2018-09-26 07:38:48 · 70 阅读 · 0 评论 -
hdu 1003 最大总和 (dp)
问题描述给定序列a [1],a [2],a [3] ...... a [n],您的工作是计算子序列的最大和。例如,给定(6,-1,5,4,-7),此序列中的最大和为6 +(-1)+ 5 + 4 = 14。 输入输入的第一行包含一个整数T(1 <= T <= 20),这意味着测试用例的数量。然后是T行,每行以数字N开始(1 <= N <= 100000),然后是N个整数(所有...原创 2018-06-05 20:33:23 · 661 阅读 · 0 评论 -
Max Sum Plus Plus HDU - 1024 dp
Now I think you have got an AC in Ignatius.L's "Max Sum" problem. To be a brave ACMer, we always challenge ourselves to more difficult problems. Now you are faced with a more difficult problem. G...原创 2018-07-17 19:05:54 · 163 阅读 · 0 评论 -
Monkey and Banana HDU - 1069 (dp)
A group of researchers are designing an experiment to test the IQ of a monkey. They will hang a banana at the roof of a building, and at the mean time, provide the monkey with some blocks. If the monk...原创 2018-07-18 15:13:34 · 105 阅读 · 0 评论 -
宝石猎人 51Nod - 1455 记忆化搜索
苏塞克岛是一个有着30001个小岛的群岛,这些小岛沿着一条直线均匀间隔分布,从西到东编号为0到30000。众所周知,这些岛上有很多宝石,在苏塞克岛上总共有n颗宝石,并且第i颗宝石位于岛 pi上。小法正好到达0号小岛上,他拥有卓越的跳跃能力,能根据以下规则在小岛之间向东重复跳跃:・ 首先,他会从0号岛跳到d号岛・ 此后,他会根据以下规则继续跳跃,L是上一次跳跃...原创 2018-08-11 18:50:28 · 152 阅读 · 0 评论 -
矩阵取数问题 V2 51Nod 1084(多维dp)
一个M*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,先从左上走到右下,再从右下走到左上。第1遍时只能向下和向右走,第2遍时只能向上和向左走。两次如果经过同一个格子,则该格子的奖励只计算一次,求能够获得的最大价值。例如:3 * 3的方格。1 3 32 1 32 2 1能够获得的最大价值为:17。1 -> 3 -> 3 -> 3 -> 1 ...原创 2018-08-11 19:42:17 · 138 阅读 · 0 评论 -
Robberies(hdu-2955)dp
可怜的POIUYTREWQ最近想买下dota2的商品,但是手头缺钱。他想起了之前看过的一部大片,觉得抢银行也许是个不错的选择。他认为,坏人被抓是因为没有预先规划。于是他在之前的几个月对各大银行进行了一次评估; 评估内容包括安全性和可盗窃金额: 他想知道在在某个风险系数下可以偷窃的最大金额 Input第一行给出了一个整数T, 表示有T组测试数据. 对于每一组数据,第一行给出了一个浮点数...原创 2018-08-08 21:04:51 · 457 阅读 · 1 评论 -
Piggy-Bank hdu1114(完全背包)
在 ACM 能够开展之前,必须准备预算,并获得必要的财力支持。该活动的主要收入来自于 Irreversibly Bound Money (IBM)。思路很简单。任何时候,某位 ACM 会员有少量的钱时,他将所有的硬币投入到小猪储钱罐中。这个过程不可逆,因为只有把小猪储钱罐打碎才能取出硬币。在足够长的时间之后,小猪储钱罐中有了足够的现金,用于支付 ACM 活动所需的花费。但是,小猪储钱罐存在一个...原创 2018-08-08 21:09:22 · 257 阅读 · 0 评论 -
悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 (HDU-2191)(多重背包)
急!灾区的食物依然短缺! 为了挽救灾区同胞的生命,心系灾区同胞的CK准备自己采购一些粮食支援灾区,现在假设CK一共有资金n元,而市场有m种大米,每种大米都是袋装产品,其价格不等,并且只能整袋购买。 请问:CK能用有限的资金最多能采购多少公斤粮食呢? Input输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是两个整数n和m(1<=n<=100, 1&l...原创 2018-08-08 21:12:31 · 95 阅读 · 0 评论 -
饭卡 HDU - 2546(01背包)
电子科大本部食堂的饭卡有一种很诡异的设计,即在购买之前判断余额。如果购买一个商品之前,卡上的剩余金额大于或等于5元,就一定可以购买成功(即使购买后卡上余额为负),否则无法购买(即使金额足够)。所以大家都希望尽量使卡上的余额最少。 某天,食堂中有n种菜出售,每种菜可购买一次。已知每种菜的价格以及卡上的余额,问最少可使卡上的余额为多少。 Input多组数据。对于每组数据: 第一行为正整数n...原创 2018-08-08 21:16:52 · 109 阅读 · 0 评论 -
P1060 开心的金明 (dp)
题目描述金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NNN元钱就行”。今天一早金明就开始做预算,但是他想买的东西太多了,肯定会超过妈妈限定的NNN元。于是,他把每件物品规定了一个重要度,分为555等:用整数1−51-51−5表示,第555等最重要。他还从因特网上查到了...原创 2018-09-19 22:55:21 · 179 阅读 · 0 评论 -
CodeForces - 215E 【数位dp】
Ť题意:判断一个区间中有多少个数是二进制时是循环的,比如101010,以10为循环。思路:以位数来处理,i是处理到当前长度i,j是循环体的长度,当i<len【二进制的长度】时只要i%j==0则长度为j时的全部数都可以,当i==len时要特殊处理到最大的循环,还有去重,因为循环体j的长度为4时已经包含了长度1【1111】,2【1010】【1111】 #include<stdio...原创 2018-12-07 23:16:28 · 230 阅读 · 0 评论