dp
Phantom_matter
庸俗的博主。
展开
-
蓝桥杯 糖果 动态规划
糖果店的老板一共有 M 种口味的糖果出售。为了方便描述,我们将 M 种口味编号 1∼ M。小明希望能品尝到所有口味的糖果。遗憾的是老板并不单独出售糖果,而是K 颗一包整包出售。幸好糖果包装上注明了其中 K 颗糖果的口味,所以小明可以在买之前就知道每包内的糖果口味。给定 N 包糖果,请你计算小明最少买几包,就可以品尝到所有口味的糖果。思路:状压dp。#include<bits/stdc++.h>using namespace std;const int maxn = 1<<原创 2022-04-01 07:58:21 · 756 阅读 · 0 评论 -
P1021 [NOIP1999 提高组] 邮票面值设计
https://www.luogu.com.cn/problem/P1021、思路:暴搜+dp#include<bits/stdc++.h>using namespace std;const int maxn = 1e3;#define int long longint dp[maxn];int a[30],n,m;int fun(int k){ int d[maxn]; memset(d,0x3f,sizeof(d)); for(int j =原创 2022-03-29 22:14:41 · 236 阅读 · 0 评论 -
蓝桥杯 乘积最大-动态规划
思路 :定义一个二维数组dp[i][j]dp[i][j]dp[i][j],代表在第i个字符后插入第j个乘号取得的最大乘积。状态转移:dp[i][j]=max(dp[i][j],dp[i−1][l]∗sum)dp[i][j] = max(dp[i][j], dp[i - 1][l] * sum)dp[i][j]=max(dp[i][j],dp[i−1][l]∗sum)遍历lll。在其他的oj可以过,但是在洛谷过不了,洛谷的数据比较强,需要用到高精度存dpdpdp,这里的代码是非高精度的,博主太懒了,如果.原创 2022-03-16 23:33:20 · 546 阅读 · 0 评论 -
P1006 [NOIP2008 提高组] 传纸条
https://www.luogu.com.cn/problem/P1006这道题洛谷里的题解大都不太详细,有很多点没说出来,不过博主作为退役老人,也不太想去写博客了,这里猜想一下,我觉得这道题有O(nm)O(nm)O(nm)的做法。这里给出O(n2m2)O(n^2m^2)O(n2m2)的算法。#include<bits/stdc++.h>using namespace std;// clock_t start, end;// start = clock();//原创 2022-03-15 11:12:19 · 249 阅读 · 0 评论 -
蓝桥杯 18省Ca4-第几个幸运数
#include<bits/stdc++.h>using namespace std;// clock_t start, end;// start = clock();// end = clock();// cout << (double) (end - start) / CLOCKS_PER_SEC << endl;//ios::sync_with_stdio(false);//cin.tie(nullptr);#define.原创 2022-03-14 09:57:01 · 417 阅读 · 0 评论 -
dp 方格取数
https://www.luogu.com.cn/problem/P1004错误示例:跑两遍dp#include<bits/stdc++.h>using namespace std;// clock_t start, end;// start = clock();// end = clock();// cout << (double) (end - start) / CLOCKS_PER_SEC << endl;//ios::sy原创 2022-03-13 20:47:19 · 473 阅读 · 0 评论 -
GarsiaWachs算法 石子合并 区间dp
我们从序列中找到第一个a[i]a[i]a[i],使得$$原创 2022-03-10 11:15:56 · 173 阅读 · 0 评论 -
蓝桥杯-测试次数
问题描述x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机。各大厂商也就纷纷推出各种耐摔型手机。x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许上市流通。x星球有很多高耸入云的高塔,刚好可以用来做耐摔测试。塔的每一层高度都是一样的,与地球上稍有不同的是,他们的第一层不是地面,而是相当于我们的2楼。如果手机从第7层扔下去没摔坏,但第8层摔坏了,则手机耐摔指数=7。特别地,如果手机从第1层扔下去就坏了,则耐摔指数=0。如果到了塔的最高层第n层扔没摔坏,原创 2022-03-07 20:00:44 · 86 阅读 · 0 评论 -
CF 1594 E2
https://codeforces.com/problemset/problem/1594/E2一个WAWAWA了NNN发的dpdpdp。题意:给一个满二叉树 ,类似于线段树一样,若父节点索引为kkk,定义它的左儿子为2×k2\times k2×k,右儿子为2×k+12\times k+12×k+1。 现在可以对每个节点赋值,取值范围为{0,1,2,3,4,50,1,2,3,4,50,1,2,3,4,5}。但是,相邻节点的值异或和不能为000或111,其中,有些点已经被固定。问有多少种赋值方案。泪目原创 2021-11-08 20:25:09 · 228 阅读 · 0 评论 -
一篇水过去的dp
给定一个长度LLL,可以对它的(1,2,3,L−1)(1,2,3,L-1)(1,2,3,L−1)的位置进行切割,有些给定点无法切割。对于不同的切割方案,如果LLL被切成mmm块,每段长aia_iai,显然有∑i=1ma[i]=L\sum_{i=1}^ma[i]=L∑i=1ma[i]=L,求∏i=1mai2\prod_{i=1}^ma_i^2∏i=1mai2。定义dpidp_idpi为前iii段的切割总方案数,那么有dpi=∑ji−1dpjdp_i=\sum_j^{i-1}dp_jdpi=j∑i原创 2021-11-01 21:35:21 · 76 阅读 · 0 评论 -
2021 ICPC 江西省大学生程序设计竞赛 A题
2021 ICPC 江西省大学生程序设计竞赛 A题题意 : 给出一个01矩阵,从起点(1,1)1,1)1,1)走到(n,m)(n,m)(n,m),求走过0的个数不少于ppp且走过1的个数不少于qqq的不同路径数。只能向下或向右走。样例:思路:很明显,这是一道动态规划题,让我们来构造一个可转移的状态。有一个显然的特征:从起点走到终点它走过0的个数或者1的个数不会超过n+m−1n+m-1n+m−1,换句话说,从(1,1)(1,1)(1,1)走到(i,j)(i,j)(i,j),num(0)+num(1)原创 2021-10-30 11:49:22 · 664 阅读 · 0 评论 -
hdu 7131
题目思路:很明显我们要求nunhehhehnunhehhehnunhehheh字符串的数量,对于每一个完整的nunhehhehnunhehhehnunhehheh串与后面a进行匹配的组合数就可以求得答案。那么怎么来求这个nunhehhehnunhehhehnunhehheh字符数量?求nunhehhehnunhehhehnunhehheh则如果知道前面有多少个nunhehhenunhehhenunhehhe串再加上后面的hhh数就得到了。那么要求nunhehhenunhehhenunhehhe就原创 2021-10-14 18:35:07 · 110 阅读 · 0 评论 -
power oj 3136: Zed的影流部队Plus
题目要推的东西太多了,我不想写 ,你们要学会自己分析。#include <bits/stdc++.h> using namespace std; #define rep(i, x, y) for(int i=(x);i<=(y);++i)#define dep(i, x, y) for(int i=(x);i>=(y);--i)const int INF = 0x3f3f3f3f;const int maxn = 5e3;int g[maxn][maxn];in原创 2021-09-24 00:57:28 · 74 阅读 · 0 评论 -
power oj 3136: Zed的影流部队
题目定义dp[i][j]dp[i][j]dp[i][j]为前i列异或和为j的最少改变次数。这道题细节挺多的,由于本人太懒,不推了!#include <bits/stdc++.h> using namespace std; #define rep(i, x, y) for(int i=(x);i<=(y);++i)#define dep(i, x, y) for(int i=(x);i>=(y);--i)const int INF = 0x3f3f3f3f;cons原创 2021-09-24 00:55:25 · 92 阅读 · 0 评论 -
power oj 3132
恰巧走KKK步方案数定义dp[i][j]dp[i][j]dp[i][j]走i步到达点j方案数。状态转移很好推,为了减少时间,用了点前缀和的思想#include<bits/stdc++.h>using namespace std;// clock_t start, end;// start = clock();// end = clock();// cout << (double) (end - start) / CLOCKS_PER_SEC原创 2021-09-24 00:51:34 · 105 阅读 · 0 评论 -
杭电多校训练 dp 背包问题
I love exam#include<bits/stdc++.h>#define N 500using namespace std;typedef long long ll;int n, m;map<string, int> mp;string s;int f[109][109], dp[1009][15], mx[52][1009];inline ll rd() { ll x = 0; char c = getchar(); bool原创 2021-07-24 15:08:25 · 107 阅读 · 0 评论 -
悬线法求矩阵最大面积
洛谷P4147 玉蟾宫输入样例:5 6 R F F F F F F F F F F F R R R F F F F F F F F F F F F F F F我们对这个操作一下,变成0.1矩阵(单纯为了好看):011111111111000111111111111111然后,悬线法是什么呢?悬线的定义,就是一条竖线,这条竖线要满足上端点在整个矩形上边界或者是一个障碍点。然后以这条悬线进行左右移动,直到移至障碍点或者是矩阵边界,进而确定这条悬线所在的极大矩阵。所谓线,就是我原创 2021-07-20 23:09:27 · 204 阅读 · 1 评论 -
动态规划详解
闲着无聊 写一篇二进制优化dp玩玩:题目链接有 N 种物品和一个容量是 V的背包。第 i种物品最多有 si 件,每件体积是 vi,价值是 wi。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。输出最大价值。第一行两个整数,N,V,用空格隔开,分别表示物品种数和背包容积。接下来有 N行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i种物品的体积、价值和数量。4 51 2 32 4 13 4 34 5 2输出样例:10二进制优化背包的前提是你原创 2021-07-25 02:10:14 · 195 阅读 · 0 评论 -
单调队列优化多重背包
有 N 种物品和一个容量是 V 的背包。 第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi 。求解将哪些物品装入背包,可使物品体积总和不超过背包容量,且价值总和最大。 输出最大价值。 输入格式第一行两个整数,N,V (0<N≤1000, 0<V≤20000),用空格隔开,分别表示物品种数和背包容积。接下来有 N 行,每行三个整数 vi,wi,si,用空格隔开,分别表示第 i 种物品的体积、价值和数量。 输出格式输出一个整数,表示最大价值。 数据范围0<N≤1000.原创 2021-07-29 10:36:53 · 102 阅读 · 0 评论 -
树形DP 没有上司的舞会
题目链接#include<bits/stdc++.h>using namespace std;#define int long long#define gcd(a, b) __gcd(a,b)const long long mod = 1e9 + 7;const int maxn = 4e4 + 5;int dp[maxn][3];int a[maxn];vector<int> g[maxn];void dfs(int u, int f) {////原创 2021-07-16 18:55:52 · 72 阅读 · 0 评论