
动态规划
Soar-
这个作者很懒,什么都没留下…
展开
-
01背包(要求恰好装满)
01背包之 装满。 把dp[i][0]都看作是装满的,初始化为0,其他的都是-INX_MAX(足够小就行);一维数组就是初始化dp[0]=0,其他为负值就可以了。 然后按照01背包不一定完全装满的情况去做就行了。 最后遍历一个最大值便是所要的答案。 测试数据还是用的POJ3624的,正好这里的答案23正好装满背包。原创 2017-11-18 15:47:19 · 3243 阅读 · 0 评论 -
L3-001. 凑零钱(背包dp,输出路径)
L3-001. 凑零钱 韩梅梅喜欢满宇宙到处逛街。现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债。韩梅梅手边有104枚来自各个星球的硬币,需要请你帮她盘算一下,是否可能精确凑出要付的款额。输入格式:输入第一行给出两个正整数:N(<=104)是硬币的总个数,M(<=102)是韩梅梅要付的款额。...原创 2018-03-30 11:11:40 · 361 阅读 · 0 评论 -
校oj10532: 生成字符串(dp,最优状态转移)
题目:10532: 生成字符串Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 91 Solved: 5[Submit][Status][Web Board]DescriptionFlowersea想为某些编程竞赛生成一个输入文件。他的输入是由n个字母“a”组成的字符串。他懒得写一个生成器,所以他会在文本编辑原创 2017-12-14 22:05:33 · 235 阅读 · 0 评论 -
POJ1159---Palindrome(dp,LCS)
POJ1159---Palindrome(dp,LCS)题意理解:给定一个字符串,问给这个字符串添加多少字符可以使得其为字符串。emmm,其实是个最长公共子序列问题,原序列长度-原序列和逆序列的最长公共子序列就是所求的答案(也就是添加的都是不在最长公共子序列的字符,去平衡一下)最长公共子序列:最长公共子序列(LCS) dp[i][j]:字符串s1…si和字符串t1…tj原创 2017-11-27 11:53:10 · 183 阅读 · 0 评论 -
POJ 3046---Ant Counting(多重组合数)
POJ 3046---Ant Counting http://poj.org/problem?id=3046多重组合数问题原型:有n种物品,第i种物品有a[i]个。不同种类可以取分但相同种类物品无法区分,从这些物品中取出m个的话,有多少种取法。题意理解:有T种蚂蚁,问这些蚂蚁分别取出 S.S+1...B 个的话,有多少种取法,就是原型中有若干个不同原创 2017-11-26 22:25:53 · 328 阅读 · 0 评论 -
HDU 2844 Coins(多重背包,装满可行性)
HDU 2844 Coins (POJ1742也是这道,但是用多重背包超时) http://acm.hdu.edu.cn/showproblem.php?pid=2844题意: 现在有价值val[1],val[2],…val[n]的n种硬币, 它们的数量分别为原创 2017-11-26 17:17:19 · 473 阅读 · 0 评论 -
HDU 2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包基础题)
HDU2191悼念512汶川大地震遇难同胞——珍惜现在,感恩生活(多重背包)http://acm.hdu.edu.cn/showproblem.php?pid=2191题意: 假设你有资金n元, 然后有m种大米, 每种大米价格为cost[i], 重量为val[i], 数量为num[i]. 现在有n元钱,去买大米,求大米的最大重量。分析: 本题是典型的原创 2017-11-25 20:27:30 · 241 阅读 · 0 评论 -
POJ2229---Sumsets(数的划分,dp,透彻地讲解两种递推方法)
方法①:dp[i]:i的划分数。dp[i]=dp[i-1] //i为奇数dp[i]=dp[i-1]+dp[i/2] //i为偶数边界控制:dp[1]=1当i为奇数,很好理解,奇数是1产生的吧,每个划分里面必须都要有1,把这个1减去,就是偶数i-1的划分。把7的每个划分都减去1不就是6的吗?i=71) 1+1+1+1+1+1+1原创 2017-11-24 14:42:21 · 804 阅读 · 2 评论 -
POJ---1384Piggy-Bank (完全背包+装满问题)
includeincludedefine INF 1e9using namespace std; int v[506], w[506]; int dp[10010];int main() { int N; cin >> N; int W; while (N–) { int l, r; cin >> l >> r; W原创 2017-11-18 19:40:40 · 229 阅读 · 0 评论 -
POJ2063---Investment(完全背包)
先做完这几种类型背包的题再总结。这道题是多次运用背包问题,每年都要去挑背包,且背包越来越大。#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>const int N = 1e7;using namespace std;int w[15], v[15];int dp[N];int main(){原创 2017-11-19 20:56:30 · 239 阅读 · 0 评论 -
POJ1836-Alignment(最长上升子序列)
**题意:删去最少的人,使得任何一个人能看到左右 任一 一边的尽头。 思路:从左边找一个最长上升子序列,从右边找一个最长上升子序列。这样两个序列 不交叉 的时候, 使得序列和最大即可。**提供两种AC代码。不懂代码的请看这道题POJ3903#include<cstdio>#include<iostream>#include<algorithm>using namespace std;int原创 2017-11-22 17:27:46 · 267 阅读 · 0 评论 -
POJ3903(dp,最长上升子序列,最基础题)
最长上升子序列问题:定义dp[i]:以 a[i]为末尾的 最长上升子序列 的长度。递推关系: dp[i]=max{1,dp[j]+1} 当 i>j且a[i]>a[j]时边界控制: d[i]=1;#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>using namespace std;int d原创 2017-11-22 10:26:25 · 690 阅读 · 1 评论 -
POJ2264---Advanced Fruits(dp,LCS变着花样记录路径,POJ2250的升级版)
这个题!变着花样考LCS,并且记录路径不是让记录LCS的呀,其他不在LCS的元素也要记录!!! 还是拿POJ2250的分析思路来搞! 两个序列分别为: s1=abcd s2=becddp[i][j]:字符串s1…si和字符串t1…tj对应的LCS长度。递推关系: dp[i][j]=dp[i-1][j-1]+1; (s[i-1]=t[i-1])//字符串从0开始存放。 dp[i][j]=m原创 2017-11-20 21:22:48 · 379 阅读 · 0 评论 -
POJ2250---Compromise(dp,最长公共子序列,输出路径)
最长公共子序列,只不过这里的元素是字符串,而不是字符了。都一样的! 关键是怎么打印路径???还是要从dp矩阵图去走怎么下来的怎么回去,算法导论上有很好的讲解,只不过感觉网上好多实现方法有点过于复杂! 先举个栗子: 两个序列分别为: s1=abcd s2=becddp[i][j]:字符串s1…si和字符串t1…tj对应的LCS长度。 递推关系: dp[i][j]=dp[i-1][j-1]原创 2017-11-20 17:36:12 · 395 阅读 · 0 评论 -
POJ3356---(最长公共子序列)
emmm,这道题有说要连续输入吗??? 理解下题意,还是最长公共子序列的问题。#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;char s[1010], t[1010];int dp[1010][1010];int main(){ int ls,原创 2017-11-20 13:58:19 · 216 阅读 · 0 评论 -
POJ1458---(最长公共子序列最基础题)
最长公共子序列(LCS) dp[i][j]:字符串s1…si和字符串t1…tj对应的LCS长度。 递推关系: dp[i][j]=dp[i-1][j-1]+1; (s[i-1]=t[i-1])//字符串从0开始存放。 dp[i][j]=max(dp[i-1][j],dp[i][j-1]); (其他) 边界控制: dp[i][j]=0(i=0||j=0) //意味原创 2017-11-20 13:31:13 · 256 阅读 · 0 评论 -
POJ3624---01背包入门 dp+滚动数组+重复利用一维数组
题意:01背包入门题(入门必做) 思路:dp,用二维数组会MLE(超内存),由于每个状态只与前一状态有关,故可开滚动数组压缩空间,也可以重复利用一个一维数组。 dp[i][j]代表从前i个物品中选出总重量不超过j的物品时总价值的最大值。则 dp[i][j]=max{dp[i-1][j],dp[i-1][w[i]-j]+v[i]} (w[i]<=j) dp[i][j]=dp[i-1][j] (原创 2017-11-18 12:23:39 · 809 阅读 · 0 评论 -
LeetCode --- 动态规划(一)
LeetCode前200道题中的动态规划10. 正则表达式匹配比较难的一道动态规划,给出两种方法。当前位置不是*比较容易,是*的时候要考虑可以不用前面的符号和用多次的问题。class Solution {public: bool match(char* str, char* pattern) { int m = strlen(s...原创 2019-06-11 23:20:46 · 281 阅读 · 0 评论