dp
small__snail__5
如果有一天您来到了这里请留下您的痕迹,欢迎各种评论,一同进步。
我愿意做一只小蜗牛,不艳羡别人的速度,而独享自己的慢慢旅程,总有一天,我也可以骄傲的告诉所有人,我虽然慢,但是我不曾放弃,人生总要坚持点什么。
展开
-
hdu2049
不容易系列之(4)——考新郎Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 32659 Accepted Submission(s): 11949Problem Description国庆期间,省城HZ刚刚举行原创 2016-09-02 09:22:23 · 455 阅读 · 0 评论 -
poj1026 Pearls
//题意:给你两个值 分别代表珍珠的number,price,price大的可以代替price小的看样例2可得知//思路:1)买的总个数一定;2)大的可以替换小的质量(这里注意严格按照题目给的price顺序来替换,也就是下面的price替换上面的,我自己按照price从小到大排序后总是WA,苦苦找不到原因);3)枚举每一个情况,也就是全部用当前price替换,n-1个替换,n-2个替换....然后...原创 2018-04-07 17:13:22 · 162 阅读 · 0 评论 -
poj1267 Cash Machine
//题意:给你一行数字前两个为cash,t,分别代表目标达到值和接下来有几组数据,记下来有t组数据,每组为number,price分别代表面额为price的纸币有number个,像一个策略将这几组数据加起来总的sum接近cash或者等于cash不能大于//思路:这是一个多重背包问题,每类物品实际上根据题目要求总会有上限,那么将多重背包转换为01背包就很好想,这里主要就是转换的问题了很容易超时,我在...原创 2018-04-09 09:29:10 · 198 阅读 · 0 评论 -
poj1837 balance
//题意:先给定两个值c,g分别代表:在臂长为15(两边均15)的天平上的总的挂钩数和砝码个数。下一行为c个数字代表天平的哪些位置有挂钩,例如-2代表据天平中心向左2个距离 ;2代表据天平中心向右2个距离。最后一行有g个数字代表每个砝码的重量。题目要求是两边天平保持平衡的挂法。//思路:天平最极端的情况为 +15*max_g*max_c,-15*max_g*max_c,那么将此题转换为一个dp问题...原创 2018-04-09 17:19:21 · 293 阅读 · 0 评论 -
poj3176 Cow Bowling
//题意:给一个数字n,代表着从i=1~n行,每行i个数字,然后求出从第一行到最后一行数字和最大的值,每个数字只能加他下一行的左边或者右边相邻的数字//思路:动态规划从下向上推则会有最优解 动态规划dp[i][j] = dp[i][j] + max(dp[i+1][j], dp[i+1][j+1]);因为存图的时候是直角三角形存图 不然应该是dp[i][j] = dp[i][j] + max(dp...原创 2018-04-02 16:46:27 · 172 阅读 · 0 评论 -
poj1080 Human Gene Functions
//题意:给你一串碱基序列,将每队碱基配对都有得分,如图给的碱基表,当然可以其中有碱基对空,求最高分//思路:通过状态转移,从头至尾扫描,变形的最长公共子序列,(相同碱基配对得分最高)那么此时要么碱基配碱基,要么碱基配空则见代码:#include <iostream>#include <cstdio>#include <algorithm>#include...原创 2018-04-02 22:42:12 · 130 阅读 · 0 评论 -
poj1159 Palindrome
//题意:给你一个串,问最少任意加几个字符便可以构成回文串//思路:将字符串翻转和原串求最长公共子序列并用串长减去序列长度则可得到结果(但是此题数组数量较大要用到滚动数组,滚动数组思路基本和二维数组思路一样只是每次在遍历完一次要维护一次见代码)#include <iostream>#include <cstdio>#include <cstring>#in...原创 2018-04-03 10:05:25 · 245 阅读 · 0 评论 -
hdu1243
//题意:给定一行字符串每个字符有自己对应的得分,然后接下来的两个串让你求出最长公共子序列的变形,什么变形呢,就是在泥鳅最长公共子序列的时候每次是给长度+1,而这里不是+1是加上相应的字符代表的分数,求的最高分数//思路:利用求最长公共子序列的方式将最后+1改为价对应的分数#include <cstdio>#include <iostream>#include <...原创 2018-03-28 15:56:11 · 137 阅读 · 0 评论 -
poj1018 Communication System
//题意:第一行给你两个数字,第一个是T组数据,第二个数n是接下来有几行,每一行第一个m代表这一行有几组值,d,p分别代表带块(跟家里的宽带最大允许通过字节数差不多意思)和价格,问:每一行代表一个设备,每个设备有m个厂商提供自己的产品,每一类设备选择一个厂商,共选n个设备,然后因为一个设备选择一个厂商,在这些厂商中选择一个d,带宽最小值,求得d/(p1+p2+...+pn)最大值,例如样例:第一行...原创 2018-04-11 22:30:24 · 252 阅读 · 0 评论 -
poj3267 The Cow Lexicon
//题意:给一个母串,给一些单词,这个母串有下面一些单词组成,问最少删减几个字符,就可由一些单词组成母串//思路:dp[i]表示当前下表位置的串最少删掉的字符个数,那么将单词分别与母串比较,母串从前向后从第一个字符开始比较,若单词长度大于当前母串下标则dp[i] = dp[i-1] + 1,当单词长度大于等于当前母串下表时,若此时正好完全包含某个单词,那么d[i] = dp[i-len] + (i...原创 2018-04-05 13:15:59 · 126 阅读 · 0 评论 -
poj1836 Alignment
//题意:给一个串num[n],要求删掉最少的个数,任取串中一个元素num[i],满足num[0]~num[i]单增,或者num[i]~num[n-1]单减//思路:从头至尾和从尾至头最长上升子序列保存状态值,将两个数组相加,相加规则:max(dp1[i] + dp2[i+1],ans),这样能保证每个点是最长的.例如给定一个串: 3 4 5 1 2 5 4 3 , dp1[i]: 1 2 3 1...原创 2018-04-07 10:30:02 · 130 阅读 · 0 评论 -
poj3624(01背包模板)
/*基础dp*/#include #include #include #include #define maxx 100000+10 using namespace std;struct node{ int weight, value; }NN[maxx];int dp[maxx]; int main(){ int n, m; while(scanf("%d%d"原创 2016-11-30 17:35:54 · 506 阅读 · 0 评论 -
hdu5532
/*此题题意为任意去掉一个序列当中的元素后看这个序列是否满足almost sort 满足 yes,不满足 no*//*思路是典型的dp,通过将原序列和翻转顺序后的序列进行判断,判断原理是如果满足递增或递减 那么我们控制每次加1 那么 最终的总ans >= lis -1;*/#include #include #include #include using namespace std原创 2017-02-26 19:13:14 · 408 阅读 · 0 评论 -
hdu5748
/*此题题意为任意输入一段数字串,请你将最长上升子序列找出来,并且将每一个数字对应的上升子序列的编号输出出来,且输出的按照字典序排列*//*此题的思想为简单dp,且不断将当前下标更新为最小的也就是满足字典序输出*/#include#include#includeusing namespace std;const int MAX=1e5+10;const int INF=0x3f3f3原创 2017-02-26 16:14:01 · 323 阅读 · 0 评论 -
hdu2048
神、上帝以及老天爷Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 34259 Accepted Submission(s): 14085Problem DescriptionHDU 2006'10 ACM co原创 2016-09-01 19:50:34 · 691 阅读 · 0 评论 -
hdu2047
阿牛的EOF牛肉串Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 30998 Accepted Submission(s): 14615Problem Description今年的ACM暑期集训队一共有18人,原创 2016-09-01 14:51:30 · 312 阅读 · 0 评论 -
poj 1163
//这是递归的思想但是2^n次超时#include #include #include #define num 100+5using namespace std;int n;int maze[num][num];int maxsum(int x, int y){ if(x == n) return maze[x][y];//选出左值 int dx = max原创 2017-01-16 11:29:14 · 325 阅读 · 0 评论 -
hdu3779
/*题意其实就是让你判断答案是否为有所给两列数字按照任意顺序组成的一段序列*//*此题是博主在刷dp时找的但是给我的感觉更应该用dfs,下面的代码看似dp实则有dfs的思想,将一个问题分为了若干子问题从后向前递归,只有两种情况要么此时数字为第一个序列 要么是第二个序列因此在动态规划处理时这里用到了dfs,这里有个小技巧那就是结束时,我们用了int返回值函数那么满足就返回1,其他情况则是返回0,所原创 2017-02-27 20:28:28 · 594 阅读 · 0 评论 -
hdu1025最长上升序列 动态规划 + 二分
/*膜拜一下大神的二分是如何想出来的*/#include #include #include #include #define maxn 0x3f3f3f3fusing namespace std;const int maxx = 5e+5;int num[maxx];int dp[maxx];int t, n1, n2;int main(){ int k =原创 2017-02-28 16:57:53 · 612 阅读 · 0 评论 -
poj1458(最长公共子序列可做模板)
#include #include using namespace std;char s1[1000];char s2[1000];int maxlen[1000][1000];int main(){ while(cin >> s1 >> s2){ int len1 = strlen(s1); int len2 = strlen(s2);原创 2017-01-17 00:18:23 · 334 阅读 · 0 评论 -
hdu1087最长(最大)上升子序列
/*这个题的一个重要条件是下面的两个for循环,i<j && num[i] < num [j]时,有个相加关系*/#include #include #include #include #define INF 0x3f3f3f3fusing namespace std;int n;int num[1010];//原始数组int dp[1010];//记忆数组dpint原创 2017-01-20 03:05:16 · 272 阅读 · 0 评论 -
背包问题详解
P01: 01背包问题 这是最基本的背包问题,每个物品最多只能放一次题目有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前转载 2017-03-02 18:43:48 · 231 阅读 · 0 评论 -
uva12563 Jin Ge Jin Qu
#include #include #include #include using namespace std;const int maxx = 180 * 55;int t[55];//题目所给的歌的每个时长struct Node{ int num, time;//歌的数量和时长}dp[maxx];int main(){ int l; int原创 2017-03-03 17:26:00 · 340 阅读 · 0 评论 -
poj2533纯最长上升子序列
//题意:求最长上升子序列//思路:记录每个状态的最大值,且时刻维护最大值#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>using namespace std;int num[1000+10];int dp[1000+10];in...原创 2017-03-06 22:05:34 · 258 阅读 · 0 评论 -
poj2151 Check the difficulty of problems(概率dp)
//题意:给你一个M,T,N, 分别代表题的总数,几只队伍,做题最多的队伍最少要做的题数量可以大于N(当然不止一个队伍),题目要求输出,所有队伍至少作对一道且有队伍至少作对N道的概率。样例中的弟i行代表弟i只队伍分别做M个题作对的概率//思路:分析一下,设至少作对一道的概率为p已知,那么此题实际就是求作对N道的概率。然而对于作对N道题直接求该怎么求呢?首先对于每只队伍做每道题作对的概率我们已知,那...原创 2018-05-10 09:27:28 · 170 阅读 · 0 评论