DP动态规划
THE END GAME
这个作者很懒,什么都没留下…
展开
-
过河(dp+路径压缩)
dp+路径压缩#include<cstdio>#include<iostream>#include<algorithm>#include<queue>#include<cstring>#include<string>#include<stack>#include<vector>#in...转载 2019-03-30 17:25:35 · 293 阅读 · 0 评论 -
P1021 邮票面值设计
题目描述给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤40)种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值,能得到最大值MAX,使在1~MAX之间的每一个邮资值都能得到。例如,N=3,K=2,如果面值分别为1分、4分,则在1分~6分之间的每一个邮资值都能得到(当然还有8分、9分和12分);如果面值分别为1分、3分,则在1分~7分之间的每一个邮资值都能得到。可以验证...原创 2019-03-27 00:11:43 · 205 阅读 · 0 评论 -
暑假集训日记——7.16(单调栈/单调队列+codeforce)
C - Trade 题解:dp+单调队列#include<iostream>#include<cstdio>#include<string>#include<cstring>#include<vector>#include<cmath>#include<queue>#include<stac...原创 2019-07-27 13:45:26 · 156 阅读 · 0 评论 -
暑假集训日记——7.28(牛客)
筱玛爱阅读题解:状压dp1.书的标签随便贴,所以从大到小排序2.dp[i]表示买前 i 本可以优惠的最大价格状态转移方程 dp[i]=max(dp[i],dp[j]+a[cnt[i]]); 表示新买了这本书是否可以凑够一个优惠方案,并且不和之前的优惠方案相冲突dp好难…#include<bits/stdc++.h>using namespace std;const in...原创 2019-07-29 10:13:55 · 105 阅读 · 0 评论 -
暑假集训日记——8.6(codeforce)
D. Suitable Replacement题意:把 S串中的?转化为小写字母,使得字符串 S拥有最多的 字符串T的不相交字串,(S中的字母可以互换顺序)题解:贪心#include<bits/stdc++.h>#define mp make_pairusing namespace std;typedef long long ll;typedef pair<int...原创 2019-08-07 12:15:56 · 134 阅读 · 0 评论 -
背包问题
背包问题可以说是最经典的动态规划问题了。在这里,我们只讲解最基本的三种背包问题。零一背包问题:有n种重量和价值分别为Wi和Vi的物品。从这些物品中挑选出总重量不超过w的物品,每种物品都只能挑选一件,求所有挑选方案中价值总和的最大值。完全背包问题:有n种重量和价值分别为Wi和Vi的物品。从这些物品中挑选出总重量不超过w的物品,每种物品都可以挑选多件,求所有挑选方案中价值总和的最大值。部分背...原创 2019-02-14 16:33:04 · 181 阅读 · 0 评论 -
暑假集训日记——8.9(codeforce)
C. Ayoub and Lost Array题意:给出一个数组的长度以及数组中元素的取值范围,问:有多少种方案使得数组的元素的总和为三的倍数。题解:动态规划dp[i][j]dp[i][j]dp[i][j]表示 由 iii个数的和余 jjj的组合有多少组dp[i][0]=dp[i−1][0]∗a+dp[i−1][1]∗c+dp[i−1][2]∗bdp[i][0]=dp[i-1][0]*a...原创 2019-08-11 20:21:08 · 140 阅读 · 0 评论 -
暑假集训日记——8.14(codeforce)
E. 3-cycles题意:使得图中不存在长度为3的环,求满足条件的最多边的数目题解:二部图的任意两点的最小环长度大于3#include<bits/stdc++.h>#define mp make_pair#define se second#define fi firstusing namespace std;typedef long long ll;typed...原创 2019-08-15 14:27:34 · 160 阅读 · 0 评论 -
暑假集训日记——8.17(codeforce)
C. Watching Fireworks is Fun题意:一条街道有 nnn个区域。 从左到右编号为 111到 nnn。 相邻区域之间的距离为 111。在节日期间,有 mmm次烟花要燃放。 第 iii次烟花燃放区域为aia_iai,幸福属性为bib_ibi,时间为tit_iti。ti⩽ti+1t_i⩽t_i+1ti⩽ti+1如果你在第 iii次烟花发射时在x(1⩽x⩽n)x(1...原创 2019-08-18 09:11:20 · 93 阅读 · 0 评论 -
暑假集训日记——8.18(codeforce)
D. Shortest Cycle题意:一个环至少有333个点,aaa&b!b!b!=000 的两个点间有一条边,求最小环题解:floyedfloyedfloyed求解最小环O(n3)O(n^3)O(n3)emmm想到了范围问题,然后就使劲考虑怎么建环,emmm赛后发现有现成的模板…其实就是DP。#include<bits/stdc++.h>#define mp m...转载 2019-08-30 22:10:11 · 78 阅读 · 0 评论 -
暑假集训日记——7.21(区间dp+codeforce)
D. Prime Graph题解:#include <iostream>using namespace std;bool prime(int x) { if (x < 2) return false; for (int i = 2; i*i <= x; ++i) { if (x%i == 0) return false; ...原创 2019-07-22 15:14:44 · 174 阅读 · 0 评论 -
暑假集训日记——7.18(codeforce)
C. Basketball Exercise题解:我也是醉了,我说我咋连一道简单dp的题都写不对…题意理解错了…写成了:单调递减子序列的最大和:#include<bits/stdc++.h>#define mp make_pairusing namespace std;typedef long long ll;typedef pair<int, int> ...原创 2019-07-20 10:04:17 · 164 阅读 · 0 评论 -
删除括号
关键删括号的时候一定要时刻保证左括号数量比右括号多定义dp[i][j][k]表示考虑 A 前i个匹配了 B 前 j 个A 被删除部分左括号数-右括号数 = k#include<iostream>#include<queue>#include<algorithm>#include<stack>#include<cstring&g...原创 2019-04-05 19:15:53 · 669 阅读 · 1 评论 -
Max Sum Plus Plus
/*1.基本思路: 首先,定义数组num[n],dp[m][n]. num[n]用来存储n个整数组成的序列. dp[i][j]用来表示由前 j项得到的含i个字段的最大值,且最后一个字段以num[j]项结尾。仔细想想,我们可以知道: dp[i][j]=max(dp[i][j-1]+num[j],dp(i-1,t)+num[j]) 其中i-1<=t<=j-1. (...转载 2019-04-11 16:52:10 · 63 阅读 · 0 评论 -
Longest Ordered Subsequence
https://vjudge.net/contest/256508#problem/K#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<cmath>#include<v...原创 2019-04-11 16:58:22 · 75 阅读 · 0 评论 -
Dollar Dayz
完全背包+高精度#include<cstdio> #include<cstring> #define ll __int64 ll INF=1000000000000000000; ll a[1010];//高位 ll b[1010];//低位 int main() { int n,k,i,j; while(scanf...转载 2019-04-12 16:51:53 · 87 阅读 · 0 评论 -
数位DP
数位dp我们要求[a,b]不包含49的数的个数,可以想到利用前缀和来做,具体来说就是[a,b] = [0,b] - [0,a),(")"是不包括a),我们先求出给定a,b的每个位置的数,保存在数组s中,例如a = 109,那么a[1] = 9,a[2] = 0,a[3] = 1.然后开始dp,我们可以选择记忆化搜索或者是递推,前一种相对于第二种而言简单和较为容易理解一些,所以我们选择记忆...转载 2019-02-19 01:30:20 · 54 阅读 · 0 评论 -
Educational Codeforces Round 63 Editorial D
dp[i][0]代表第i位置之前没有被乘以xdp[i][1]代表第i位置正在被乘以xdp[i][2]代表第i位置没有被乘以x,但之前被乘以过x当子段和为负时舍去枚举每一个状态,进行动态转移方程#include<algorithm>#include<cstdio>#include<cmath>#include<iostream>#i...转载 2019-04-29 16:16:09 · 92 阅读 · 0 评论 -
D. Three Pieces
题意:有一个n * n 的矩阵,不重不漏地随机放着 1到 n*n 的每个数。现在你站在数字1的位置,每次可以有三种走法:走直线,四个方向。一次可以走多个单位,不仅只能走到相邻的位置,就像中国象棋里的车。走斜线,四个方向。一次可以走多个单位,像国际象棋里的象。走日字,八个方向,一次只能走一个单位。就像中国象棋里的马。每走一次,需要花费一个精力值。如果切换了一次走法,需要额外花费一个精力值...转载 2019-05-09 17:14:47 · 203 阅读 · 0 评论 -
计算直线的交点数
平面上有n条直线,且无三线共点,问这些直线能有多少种不同交点数。 比如,如果n=2,则可能的交点数量为0(平行)或者1(不平行)。http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?cid=5203&pid=1标程:#include<stdio.h> int dp[200][200]; int main(){ ...转载 2019-05-18 12:59:22 · 1932 阅读 · 0 评论 -
暑假集训日记——7.15(ST表+单调栈/单调队列+codeforce)
C. From S To T模拟题#include<algorithm>#include<cstdio>#include<cmath>#include<iostream>#include<cstring>#include<functional>#include<set>#include<ma...原创 2019-07-16 09:57:31 · 411 阅读 · 0 评论 -
被3整除的子序列
区间DP#include<iostream>#include<queue>#include<algorithm>#include<stack>#include<cstring>#include<string>#include<cstdio>#include<set>#include...原创 2019-04-05 16:14:11 · 331 阅读 · 0 评论