
dp
hohotiger
这个作者很懒,什么都没留下…
展开
-
HDU - 2571
穿过幽谷意味着离大魔王lemon已经无限接近了! 可谁能想到,yifenfei在斩杀了一些虾兵蟹将后,却再次面临命运大迷宫的考验,这是魔王lemon设下的又一个机关。要知道,不论何人,若在迷宫中被困1小时以上,则必死无疑!可怜的yifenfei为了去救MM,义无返顾地跳进了迷宫。让我们一起帮帮执着的他吧! 命运大迷宫可以看成是一个两维的方格阵列,如下图所示: yifen原创 2017-03-10 20:45:04 · 377 阅读 · 0 评论 -
POJ-3624 Charm Bracelet dp
题意N个物品每个就一个给出每个物品的价值和花费,表示最终选择一些物品使得花费不超过M,使得价值最大化分析最优化问题 考虑dp n个物品选择一些得到最后的最优化问题 我们不妨考虑,假设我们得到了n-1个物品在容量为m情况下最优化值存储在f(n-1,m)中 当前关于第n个物品我们考虑最优值 选或者不选 也就是需要对比f(n-1,m),f(n-1,m-w[n])+d[i]的大小 由于前者是不选原创 2017-10-26 19:52:40 · 180 阅读 · 0 评论 -
51nod 1101 换零钱 简单dp
题意:问在现有面值金额下 输入一个m可以由多少种不同的金额组成那么可以定义dp[i]表示i金额由多少种不同的金额组成方式转移方程:dp[i] = (dp[i] + dp[i-cost[j])%mod; 首先要定义dp[0] = 1; 然后枚举面值 看不同数目下该面值可以组成那些金额 然后通过状态转移累计不同的组成方式#include<bits/stdc++.h>using namespace原创 2017-11-29 23:46:56 · 204 阅读 · 0 评论 -
CodeForces - 766C - Mahmoud and a Message dp
题意给出一个字符串 和每个字符的限制数量ai 让我们随意的切割成多个字符串 使得每一个字符串中的特定字符所在的子串长度len<=ai 求一共有多少个符合题目要求的方案 求其中最长的一个串长度是多少 求其中最少能分成多少个串 长度最大为1000分析明显可以用搜索 不过复杂度指数级 计数问题 考虑dp 对于第i个字符 他可以考虑从i-ai+1开始往后到i分割字符 我们这里可以枚举分割的位置原创 2017-11-20 23:31:10 · 279 阅读 · 0 评论 -
The 2014 ACM-ICPC BeiJing D - Dire Wolf HDU - 5115 区间dp
题意n个狼 排成一排 我们要把一排狼都删除掉 删除一个狼的花费是这个狼的权值和左右两个狼的附加值 求最小花费分析考虑区间dp dp[i][j]表示i到j的最小花费 我们可以枚举其中的k 为序列中最后一个删除的元素 然后记忆话搜索 这样下来最深层次的元素最先删除 附加元素就是b[l-1],b[r+1] 然后回溯得到小区间的最优解 作为我们大区间的部分和从而构造大区间的最优解code#in原创 2017-11-28 00:01:38 · 278 阅读 · 0 评论 -
最长公共子序列Lcs 51Nod - 1006
import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.PrintWriter;import java.util.Scanner;import java.util.StringTokenizer;public class Main{ static int[][] ...原创 2018-04-10 23:06:18 · 182 阅读 · 0 评论 -
Schrödinger's Knapsack ZOJ - 4019 线性DP
题意:有背包容量为c 给出两个数串 表示两种不同的物品 从物品中任意选多个数 价值是背包剩余空间*选择元素所属数串的系数问 最大价值分析: 表面上看起来是个背包题 但是空间太大导致不能背这里发现先放空间小的换来的价值大 所以我们应该先把两个数串排序 然后枚举 这里由于要考虑次序的问题 于是先放哪个 就需要用动态规划的思路 选择价值更大的dp[i][j] 表示总要选择第一个类型中前i个数 和第二...原创 2018-05-19 20:20:33 · 175 阅读 · 0 评论 -
Palindrome subsequence HDU - 4632 区间dp|记忆化搜索
// 区间dpimport java.util.Scanner;public class main { static int mod = 10007; static String l; static int[][] dp = new int[1010][1010]; public static void main(String[] args) {...原创 2018-05-14 20:20:01 · 195 阅读 · 0 评论 -
蓝桥杯 2017 国赛B组C/C++【对局匹配】
题意就是给我们一串数 让我们尽可能地取 约束条件是a[i] 和a[i]+k不能同时出现 所有元素之间相差k的元素都不能同时出现 让我们求所能取到的最大的数的和是多少分析: dp思路,这个和树形dp有点相似 就是枚举0~k 然后在每个这个元素上迭代加k 每个元素保存两个状态 不妨考虑递推过去由于我们只是尽可能选更多的数 也就是如果这个元素可以选 所有这么大的元素 都可以选 也就是我们要提前把这些元...原创 2018-05-21 20:38:02 · 577 阅读 · 0 评论 -
HDU - 1520 Anniversary party 树形dp
import java.util.ArrayList;import java.util.Arrays;import java.util.Scanner;public class Main { static int n,maxn = 6010; static int []val = new int[maxn]; static ArrayList<Integer...原创 2018-05-15 16:28:00 · 138 阅读 · 0 评论 -
EOlymp - 15 动态规划
#include<bits/stdc++.h>using namespace std;int nm[110][110];int n,m,ans,siz;int dp[110][110];char st[110][110];int main(){ ios::sync_with_stdio(0); scanf("%d%d",&n,&m); ...原创 2019-02-12 20:51:51 · 273 阅读 · 0 评论 -
Ayoub and Lost Array CodeForces - 1105C DP
Ayoub had an array a of integers of size n and this array had two interesting properties:All the integers in the array were between l and r (inclusive).The sum of all the elements was divisible by 3...原创 2019-03-01 12:06:12 · 208 阅读 · 0 评论 -
EOlymp - 3624 暴力+LCS·DP
问题描述Bob漫游仙境的时候,仙境里所用的语言实在让Bob摸不到头脑,但是在这里生活了一段时间的Bob还是发现了这仙境语言中的一些奥秘。仙境的一个单词,按照Bob总结的规律可以分如下两步翻译:将一个原始单词S分成两段L和R,然后求两个字符串L与R的最长公共子序列M。对于原始单词S的所有切分方法,当最长公共子列M的长度最长时,这个公共子列M就是原始单词对应的Bob可以看懂的单词。例如对于...原创 2019-02-26 16:14:58 · 56 阅读 · 0 评论 -
LCS问题 POJ - 1458 经典DP思路详解
题意让我们求两个字符串中最长的公共子串是多大分析最优化问题 考虑dp 我们看两个字符串如何定义解的结构 假设f(i,j)求出长度为i的串a和长度为j的串b的LCS 两个字符串中的LCS 其实就相当于 判断两个字符串最后的那个字符是否相同 如果相同那么我们就用1+f(lena-1,lenb-1) 如果不同我们就需要取f(lena-1,lenb)和f(lena,lenb-1)中的MAX原创 2019-02-25 23:32:56 · 365 阅读 · 0 评论 -
POJ 2533 Longest Ordered Subsequence 动态规划
题意本题求从1 到 n的最长上升子序列的长度分析最优化问题 考虑dp 我们求1-n最长上升子序列长度 假设记录在dp[n]中 假设我们已经知道了1—n-1的以第n-1为最后一个元素的最长上升序列的长度 那么我们拿到第n个元素不就可以判断如果这个n比n-1位置上的元素大 那么就让dp[n] = dp[n-1]+1不就可以了吗 那么dp[n-1]又怎么得到 我们需要得到dp[n-2]原创 2017-10-25 20:40:05 · 205 阅读 · 0 评论 -
蓝桥杯-K好数
问题描述如果一个自然数N的K进制表示中任意的相邻的两位都不是相邻的数字,那么我们就说这个数是K好数。求L位K进制数中K好数的数目。例如K = 4,L = 2的时候,所有K好数为11、13、20、22、30、31、33 共7个。由于这个数目很大,请你输出它对1000000007取模后的值。输入格式输入包含两个正整数,K和L。输出格式输出一个整数,表示答案对1000原创 2017-03-28 16:53:53 · 252 阅读 · 0 评论 -
HDOJ-1257 最少拦截系统
最少拦截系统Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 39448 Accepted Submission(s): 15465Problem Description某国为了防御敌国的导弹袭击,发展出一种导弹原创 2017-03-29 22:39:26 · 289 阅读 · 0 评论 -
HDU-3664-Permutation Counting
Permutation CountingTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1739 Accepted Submission(s): 918Problem DescriptionGiven a原创 2017-03-30 23:09:48 · 364 阅读 · 0 评论 -
2017百度之星资格赛 1003 度度熊与邪恶大魔王
本题我们可以类比背包 背包dp[i][j] 表示再有i个物品下j个空间所获得的最大价值本题dp[i][j] 可以表示干掉i个血量j个防御力下的最小花费我们看其实我们就是在不同血量之间转移如果当前技能的攻击力 > 当前防御力 如果攻击力能干掉怪物那么dp[i][j] = min(花费,dp[i][j]);如果干不掉 dp[i][j] = min(dp[i-伤害]原创 2017-08-06 17:51:56 · 499 阅读 · 0 评论 -
NOI-砝码称重v2 多重背包 生成函数
描述 设有1g、2g、3g、5g、10g、20g的砝码各若干枚(其总重输入 一行,包括六个正整数a1,a2,a3,a4,a5,a6,表示1g砝码有a1个,2g砝码有a2个,……,20g砝码有a6个。相邻两个整数之间用单个空格隔开。 输出 以“Total=N”的形式输出,其中N为可以称出的不同重量的个数。 样例输入 1 1 0 0 0 0 样例输出 Total原创 2017-08-18 17:47:44 · 1196 阅读 · 0 评论 -
HDU 5787 wolf Number 数位dp
题意题目就是说让我们在l到r的数字中求得有多少个连续k为不相同的数1≤L≤R≤1e182≤K≤5Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)分析直接枚举必然超时 考虑数位dp由于k最大到5 所以我们可以记录前四位的大小 通过一个check函数去判断是否存在相同的数也就原创 2017-09-07 11:39:35 · 170 阅读 · 0 评论 -
HDU odd-even number 数位dp
题意在l到r区间内求有多少个符合条件“当前数中所有连续的奇数长度是偶数 所有连续的偶数长度是奇数”的个数分析典型的数位dp问题我们设置dp数组时可以根据 dp[pos][pre][len]设定 表示在pos长度下 前面是pre并且长度是len的个数共有多少这个方法很巧妙根据这个结构 我们dfs(pos,pre,len,zero,limit)这样设置递归参数我们把所有可能符合条件的分支都去搜原创 2017-09-08 13:24:47 · 309 阅读 · 0 评论 -
POJ-1384 Piggy-Bank 多重背包变形
题意给我们一个容器的容量m n个物品 每个物品有不同的花费和价值 问我们再每个物品无限个的情况下 最后正好装满最后得到的最小价值是多少 如果装不满 就输出impossible分析目标状态:最小价值策略 限制条件:正好装满m的容量 多重背包模型 每个物品可以选择无限个 但是又要求恰好装满 满足最小价值策略我们应该取min 所以应把结果数组初始化无穷大 不然无法选出最小值 遵循递推式为dp[i原创 2017-10-27 09:55:53 · 192 阅读 · 0 评论 -
hihocoder A Game 区间dp
题意一个数串 A和B每人从这个数串的第一个或者最后一个元素选择一个数加到自己的得分里,A先选,求先手最大得分 样例: 4 -1 0 100 2 输出 99分析对于任意一个区间段 我们考虑的问题是相似的 不论任何区间段都是考虑取前面的还是取后面的 我们要从两种策略里选出一个更优的 对这个序列 我们每次都是从左或是从右选择一个元素拿出来 所以问题就相当于在从i到j的区原创 2017-10-29 15:40:14 · 236 阅读 · 0 评论 -
POJ-1050 To the Max 二维最大子段和
题意给我们一个二维矩阵 让我们在找出其中的最大子矩阵和分析对输入的一个矩阵 我们考虑一维线性矩阵 上的最大子段和 对于一个数串 我们的选择策略是res = max(res,max( sum+a[ i ], a[ i ] ));res就是最后我们得到的最大子段和的结果 a[i]是数串元素 我们这里可以把它压缩成一维 枚举任意两行 然后把两行之间的行压缩成1行 对这一行进行一维的最大字原创 2017-10-30 20:35:20 · 501 阅读 · 0 评论 -
ZOJ 3537 Cake 计算几何+区间dp
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int inf = 0x3fffffff;struct node{ int x,y;}N[510],ans[510];bool X(node a,node b,node c){ return (b.x-a.x)*(c.y-a.y)-(c原创 2017-11-08 21:46:14 · 215 阅读 · 0 评论 -
POJ-1651 Multiplication Puzzle 矩阵连乘问题(区间dp)
题意给我们n个数 让我们随意的跳出其中的数 每挑出一个数 计算代价为左边数* 当前数 * 右边的数 除了首尾两个数不选 中间的数可以任意挑 让我们求最小代价CODE#include<bits/stdc++.h>using namespace std;int a[110],m[110][110];const int maxn = 0x7f7f7f;int main(){ int n原创 2017-10-25 17:52:45 · 346 阅读 · 0 评论 -
CodeVS 1300 文字排版 线性DP
1300 文件排版时间限制: 1 s空间限制: 128000 KB题目描述 Description写电子邮件是有趣的,但不幸的是经常写不好看,主要是因为所有的行不一样长,你的上司想要发排版精美的电子邮件,你的任务是为他编写一个电子邮件排版程序。完成这个任务最简单的办法是在太短的行中的单词之间插入空格,但这并不是最好的方法,考虑如下例子:This is the example you ...原创 2019-04-23 15:01:11 · 286 阅读 · 0 评论