CodeForces 13C【DP】】的更多相关文章

题意: 给你n个数,每次只能让一个数+1,或者-1,目标是最终使这个序列构成一个非递减的序列: n是5e3,复杂度n^2内.值是1e9: 思路: 可以发现子结构是保证一个区间的非递减, 如果只是dp[a][b]代表在[a,b]上需要的最小步数,这样很难处理a,b位置的值,且不构成递推性: 所以可以在递推中(前i个)去dp以 j 值为末端的区间需要的最小步数. dp[i][j]=min(dp[i][j],min(dp[i][k]+cost); //k∈[1-j]; 然而j值是1e9,且特么n是5e…
题意: n g dough  m种商品? 每种有ai stuffing, 拿bi stuffing + ci dough -> di tugriks rest c0 dough -> d0 tugriks 求最大的tugriks 思路: dough是爸爸, dp[i] 代表 在花费 i 情况下 前 j 个 商品的最大. 枚举在 k g dough 下的各种收入情况,取最大: 大致分成两个部分,用ai + bi 获得的钱,剩下的dough去干嘛得到. #include <bits/stdc…
总结:能这么DP就这么写! 多练位运算标记. #include<bits/stdc++.h> using namespace::std; const int N=55; const int INF=0x3f3f3f3f; int n, m, dp[N][2][2][2]; char s[N][N]; bool isdigit(char ch) { if(ch>='0' && ch<='9') return true; return false; } bool isl…
思路:  dp[i][0] 代表取的时候左边没有 dp[i][1] 代表取的时候右边没有 dp[i][2] 代表取的时候左右都没有 dp[i][3] 代表取的时候左右都有 然后自己转移吧= =. 注意两个区间端点:  如果旁边有取a[i], 如果没有取b[i].  只有一个的时候取a[i].... 太狗了,这题意! #include<bits/stdc++.h> using namespace std; typedef __int64 LL; const int INF=0x3f3f3f3f;…
题意: 给你n个数,然后让这些数相加组合,然后在这些组合的数里可以再相加组合搞出给定 k,输出这些组合的数. 思路: DP. //在枚举到第i个coin的时,dp[i][j],i 肯定能被a[i]组合, //然后再枚举<=a[i]的部分,dp[i][j]的具体意义就是在coin值是i的时候,能用j去组合. //为了防止重复利用coin,从j枚举到a[i]; //最后dp[k][h]==1的把h塞到容器里去,最后输出. #include <bits/stdc++.h> using name…
题意: 在一个n*m的矩阵中有两只虫子,一只从左上角向右下角移动,另外一只从左下角向右上角移动. 要求: 1.第一只虫子每次只能向左或者向下移动一格,另外一只只能向上或者向右移动一格. 2.两只虫子的路径最多只能重合一点. 3.求解两只虫子路径中除去重合那点其余各点的权值之和最大. 思路: 1.显然这题需要枚举所有可能的相交的点. 2.将问题转化成从四个角向可能的交点的四条路的权值最大. 3.为了保证路径只能有一个交点,我们考虑从可能的交点的上面的点通往上侧的两个角,左面的点通往左侧的两个角以此…
[CodeForces - 1225E]Rock Is Push [dp][前缀和] 标签:题解 codeforces题解 dp 前缀和 题目描述 Time limit 2000 ms Memory limit 524288 kB Source Technocup 2020 - Elimination Round 2 Tags binary search dp *2200 Site https://codeforces.com/problemset/problem/1225/E 题面 Examp…
Kattis - honey[DP] 题意 有一只蜜蜂,在它的蜂房当中,蜂房是正六边形的,然后它要出去,但是它只能走N步,第N步的时候要回到起点,给出N, 求方案总数 思路 用DP 因为N == 14 所以 最多走7步 我们不妨设 (7, 7) 为原点,然后 dp[0][7][7] = 1 因为 N == 0 的时候 方案数只有一个 那就是 不动吧.. dp[i][j][k] i 代表第几步 j k 分别表示 目前的位置 一个点 在一张图里面本来有八个方向可以走 这里六边形 我们只取六个方向就可…
HDOJ 1423 Greatest Common Increasing Subsequence [DP][最长公共上升子序列] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 8768 Accepted Submission(s): 2831 Problem Description This is a problem from ZOJ 24…
HDOJ 1501 Zipper [DP][DFS+剪枝] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 10886 Accepted Submission(s): 3925 Problem Description Given three strings, you are to determine whether the third str…
HDOJ 1257 最少拦截系统 [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 50753 Accepted Submission(s): 19895 Problem Description 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹…
HDOJ 1159 Common Subsequence[DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 44280 Accepted Submission(s): 20431 Problem Description A subsequence of a given sequence is the given sequence wit…
HDOJ_1087_Super Jumping! Jumping! Jumping! [DP] Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 44670 Accepted Submission(s): 20693 Problem Description Nowadays, a kind of chess game called "Super…
POJ_2533 Longest Ordered Subsequence[DP][最长递增子序列] Longest Ordered Subsequence Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 58448 Accepted: 26207 Description A numeric sequence of ai is ordered if a1 < a2 < - < aN. Let the subsequenc…
HackerRank - common-child[DP] 题意 给出两串长度相等的字符串,找出他们的最长公共子序列e 思路 字符串版的LCS AC代码 #include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <deque> #include <vector> #include <queue> #include…
LeetCode:零钱兑换[322][DP] 题目描述 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2: 输入: coins = [2], amount = 3 输出: -1 说明:你可以认为每种硬币的数量是无限的. 题目分析 很显然,这是…
LeetCode:完全平方数[279][DP] 题目描述 给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示例 1: 输入: n = 12 输出: 3 解释: 12 = 4 + 4 + 4. 示例 2: 输入: n = 13 输出: 2 解释: 13 = 4 + 9. 题目分析 动态规划真的是笔试过程中必不可少的题型. 如果我们想知道n=15的方法数,我们可以转换为求n=14的方法数.n=11的方法数.n…
http://codeforces.com/contest/811/problem/C [题意] 给定一个自然数序列,在这个序列中找出几个不相交段,使得每个段的异或值之和相加最大. 段的异或值这样定义:段中每个不同数字(不重复)相异或. 段有这样的要求:段中任意一个数字不会在段外出现. [思路] 首先预处理每个数字第一次出现和最后一次出现的位置,这样对于一个区间[l,r]就很容易判断是否为满足题意的段. 然后区间DP,dp[i]表示子序列[1,i]的最大值. 状态转移:对于dp[i],最小值为d…
[题意] 给出一个set,set中有几个数. 现在给出n个人,环成一圈搞约瑟夫... 开始时从第1号报数,每次从set中随机选出一个数s,等报数到s后,报s的人出圈,其他人继续报数. 最后只剩1人时,他就胜出. 问最后可能有哪些人胜出,输出编号. [解释] 设dp[i][j]为剩余i个人,并且该j号报数 则状态转移方程为  dp[i][ (j+s[i]-1)%i+1 ]=dp[i-1][j] 初始时dp[1][1]=1 wow约瑟夫的递推公式太神奇了... 问题描述:n个人(编号0~(n-1))…
题目:id=2411" target="_blank">poj 2411 Mondriaan's Dream 题意:给出一个n*m的矩阵,让你用1*2的矩阵铺满,然后问你最多由多少种不同的方案. 分析:这是一个比較经典的题目.网上各种牛B写法一大堆.题解也是 我们能够定义状态:dp[i][st]:在第 i 行状态为 st 的时候的最慷慨案数. 然后转移方程:dp[i][st] = sum (dp[i-1][ss]) 即全部的当前行都是由上一行合法的状态转移而来. 而状态…
转自http://blog.sina.com.cn/s/blog_5dd8fece0100rq7d.html [题目大意]:用数轴描述一条高速公路,有V个村庄,每一个村庄坐落在数轴的某个点上,需要选择P个村庄在其中建立邮局,要求每个村庄到最近邮局的距离和最小. [题目分析]:经典DP 1.考虑在V个村庄中只建立[一个]邮局的情况,显然可以知道,将邮局建立在中间的那个村庄即可.也就是在a到b间建立一个邮局,若使消耗最小,则应该将邮局建立在(a+b)/2这个村庄上(可以通过画图知道). 2.下面考虑…
不错的dp入门题  画出dp矩阵  每个dp[i][j]是由“其上”的状态或是“其左上”的状态转化而来,那我们选对角线和上边进行三角dp推导 #include<stdio.h> #include <iostream> using namespace std; #define MAX 110 int value[MAX][MAX]; int f[MAX][MAX]; int F,V; int main() { // freopen("in.txt","r…
597. 交错匹配 ★☆ 输入文件:crossa.in 输出文件:crossa.out 简单对照 时间限制:1 s 内存限制:128 MB [问题描写叙述] 有两行自然数. UP[1..N] . DOWN[1..M] .假设UP[I]=DOWN[J]=K .那么上行的第 I 个位置的数就能够跟下行的第 J 个位置的数连一条线,称为一条 K 匹配,可是 同一个位置 的数最多仅仅能连一条线.另外,每个 K 匹配都 必须且至多 跟一个 L 匹配相交且 K ≠ L ! 如今要求一个最大的匹配数. [输入…
问题一:01背包 题目: [题目描述] 一个旅行者有一个最多能装 M 公斤的背包,现在有 n件物品,它们的重量分别是W1,W2,...,Wn它们的价值分别为C1,C2,...,Cn求旅行者能获得最大总价值. [输入] 第一行:两个整数,MM(背包容量,M≤200)和NN(物品数量,N≤30): 第2..N+12..N+1行:每行二个整数Wi,CiWi,Ci,表示每个物品的重量和价值. [输出] 仅一行,一个数,表示最大总价值. [输入样例] 10 4 2 1 3 3 4 5 7 9 [输出样例]…
题目描述 给定一个序列,初始为空.现在我们将1到N的数字插入到序列中,每次将一个数字插入到一个特定的位置.我们想知道此时最长上升子序列长度是多少? 输入 第一行一个整数N,表示我们要将1到N插入序列中,接下是N个数字,第k个数字Xk,表示我们将k插入到位置Xk(0<=Xk<=k-1,1<=k<=N) 输出 1行,表示最长上升子序列的长度是多少. 样例输入 3 0 0 2 样例输出 2 提示 100%的数据 n<=100000 [思路]:就是用dp表示前i个的最长上升子序列长度…
题意:对一个字符串进行插入删除等操作使其变成一个回文串,但是对于每个字符的操作消耗是不同的.求最小消耗. 思路: 我们定义dp [ i ] [ j ] 为区间 i 到 j 变成回文的最小代价.那么对于dp[i][j]有三种情况首先:对于一个串如果s[i]==s[j],那么dp[i][j]=dp[i+1][j-1]其次:如果dp[i+1][j]是回文串,那么dp[i][j]=dp[i+1][j]+min(add[i],del[i]):最后,如果dp[i][j-1]是回文串,那么dp[i][j]=d…
题意:uva 10154 - Weights and Measures 题意:有一些乌龟有一定的体重和力量,求摞起来的最大高度.力量必须承受其上面包含自己的所有的重量. 分析:先按其能举起来的力量从小到大排序 然后定义dp[i] 表示摞起来 i 仅仅乌龟的最小质量. 然后转移就是每次用遍历O(n)的复杂度找最小的.然后记录.保存最大值就可以. AC代码: #include<iostream> #include<cstdio> #include<cstring> #inc…
4767: 两双手 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1057  Solved: 318[Submit][Status][Discuss] Description 老W是个棋艺高超的棋手,他最喜欢的棋子是马,更具体地,他更加喜欢马所行走的方式.老W下棋时觉得无聊,便 决定加强马所行走的方式,更具体地,他有两双手,其中一双手能让马从(u,v)移动到(u+Ax,v+Ay)而另一双手能让 马从(u,v)移动到(u+Bx,v+By).小W看见…
我活着从期中考试回来了!!!!!!!!!备考NOIP!!!!!!!!! [题目大意] 给出n个整数a1~an,修改一个数的代价为修改前后差的绝对值,问修改成不下降序列或者不上升序列的最小总代价. [思路] 预处理b[],为排序后的a[]. f[i][j]表示前i个数,其中第i个数字修改为第j个大的数的最小代价.f[i][j]=min(f[i-1][k])+abs(a[i]-b[j]) (1<=k<=j).b[]正反分别来一次. 这样是O(n^3)的,不过我们发现f[i-1][k]的最小值是可以…
[题目大意] 已知一个treap上每个节点的键值.权值和访问频率.现在可以修改一些节点的权值(可以修改为实数),需要付出k(k为定制)的额外代价.一个treap的总代价=∑(每个节点的访问频率*深度)+额外代价. *有趣的结论:键值.权值一旦确定,treap是唯一确定的. [思路] 首先key值是不会变更的,我们按照key值排序,就是按照中序遍历排序.f[i][j][w]代表由i~j组成的子树且每个点的权值都大于等于w的最小总代价. 枚举区间i.j中作为根的k.如果如果wk>=w,就可以不用改根…