dp题解
明天见A
这个作者很懒,什么都没留下…
展开
-
1513C. Add One
1513C. Add One具体代码如下#include<bits/stdc++.h>using namespace std;const int N = 200010, mod = 1e9 + 7;int n, m;int dp[N][10], sum[N];void init(){ dp[0][0] = 1, dp[0][1] = 1, sum[0] = 2; for(int i = 1; i < N; ++ i) for(int j = 0; j &l原创 2021-05-27 10:27:54 · 139 阅读 · 0 评论 -
树的最长路径
树的最长路径具体代码如下#include<iostream>#include<cstring>using namespace std;const int N = 100010, M = 2*N;int n;int h[N], e[M], ne[M], w[M], idx;int ans;void add(int a, int b, int c){ e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx+原创 2021-05-04 14:50:47 · 60 阅读 · 0 评论 -
加分二叉树
加分二叉树具体代码如下#include<iostream>#include<cstring>using namespace std;const int N = 35;int n;int w[N];int f[N][N], g[N][N];void dfs(int l, int r){ if(l > r) return; int root = g[l][r]; cout << root <&原创 2021-05-01 16:47:10 · 68 阅读 · 0 评论 -
凸多边形的划分
凸多边形的划分题目数据需要用到高精度,先写一个没有高精度的写法#include<iostream>#include<cstring>using namespace std;typedef long long LL;const int N = 55, M = 35, INF = 1e9;int n;int w[N];LL f[N][N];int main(){ cin >> n; for(int i=1; i<原创 2021-05-01 15:46:42 · 284 阅读 · 0 评论 -
环形石子合并
环形石子合并具体代码如下#include<iostream>#include<cstring>using namespace std;const int N = 410, INF = 0x3f3f3f3f;int n;int w[N], s[N];int f[N][N], g[N][N];int main(){ cin >> n; for(int i = 1; i <= n; ++ i){ cin原创 2021-05-01 09:26:37 · 61 阅读 · 0 评论 -
炮兵阵地
炮兵阵地具体代码如下#include<iostream>#include<cstring>#include<vector>using namespace std;const int N = 12, M = 1 << N;int n, m;int g[110];int cnt[M];vector<int> state;int f[2][M][M];bool check(int state){ if(原创 2021-04-28 13:51:39 · 76 阅读 · 0 评论 -
玉米田
玉米田具体代码如下#include<iostream>#include<cstring>#include<vector>using namespace std;const int N = 14, M = 1 << N, mod = 1e8;int n, m;int g[N];int f[N][M];vector<int> state;vector<int> head[M];bool check(int原创 2021-04-28 11:25:17 · 85 阅读 · 0 评论 -
乌龟棋
乌龟棋具体代码如下#include<iostream>#include<cstring>using namespace std;const int N = 355, M = 41;int n, m, g[5];int f[M][M][M][M], w[N];int main(){ cin >> n >> m; for(int i = 1; i <= n; ++ i) cin >>原创 2021-04-27 20:13:57 · 83 阅读 · 0 评论 -
小国王
小国王具体代码如下#include<iostream>#include<cstring>#include<vector>using namespace std;typedef long long LL;const int N = 12, M = 1 << 10, K = 110;int n, m, cnt[M];vector<int> state;vector<int> head[M];LL f[N][K原创 2021-04-27 15:40:41 · 71 阅读 · 0 评论 -
能量石
能量石具体代码如下#include<iostream>#include<cstring>#include<algorithm>using namespace std;const int N = 10010;int n, m;int f[N];struct Stone{ int s, e, l; bool operator < (const Stone &W){ retur原创 2021-04-26 19:56:11 · 77 阅读 · 0 评论 -
股票买卖V
股票买卖V具体代码如下#include<iostream>#include<cstring>using namespace std;const int N = 100010, INF = 0x3f3f3f3f;int n;int w[N], f[N][3];int main(){ scanf("%d", &n); for(int i = 1; i <= n; ++ i) scanf("%d", &w[i]);原创 2021-04-21 20:59:58 · 73 阅读 · 0 评论 -
股票买卖IV
股票买卖IV具体代码如下#include<iostream>#include<cstring>using namespace std;const int N = 100010, M = 110, INF = 0x3f3f3f3f;int n, m;int f[N][M][2];int a[N];int main(){ scanf("%d%d", &n, &m); for(int i = 1; i <= n;原创 2021-04-21 20:39:20 · 75 阅读 · 0 评论 -
大盗阿福
大盗阿福具体代码如下#include<iostream>#include<cstring>using namespace std;const int N = 100010;int n, m;int f[2][N], a[N];int main(){ scanf("%d", &m); while(m --){ memset(f, 0, sizeof f);原创 2021-04-21 20:07:16 · 69 阅读 · 0 评论 -
Max Sum Plus Plus HDU - 1024
Max Sum Plus Plus 具体代码如下#include<iostream>#include<cstring>#include<cstdio>using namespace std;const int N = 1000010;int n, m;int a[N], f[N], last[N];int main(){ while(~scanf("%d%d", &m, &n)){ for(int i = 1;原创 2021-04-06 18:55:54 · 47 阅读 · 0 评论 -
1498C — Planar Reflections
C. Planar Reflections具体代码如下#include<iostream>#include<cstring>using namespace std;const int N = 1010, mod = 1e9 + 7;int n, k;int dp[N][N][2];int solve(int cur, int k, int dir){ if(k == 1) return 1; if(dp[cur][k][dir] != -1) ret原创 2021-03-30 13:04:43 · 140 阅读 · 0 评论 -
有依赖的背包问题
有依赖的背包问题具体代码如下#include<iostream>#include<cstring>using namespace std;const int N = 110;int n, m;int v[N], w[N];int h[N], e[N], ne[N], idx;int f[N][N];void add(int a, int b){ e[idx] = b, ne[idx] = h[a], h[a] = idx ++;}void原创 2021-03-29 20:41:33 · 63 阅读 · 0 评论 -
潜水员
潜水员代码如下//用01背包相似的问题优化即可#include<iostream>#include<cstring>using namespace std;const int N = 110;int n, V1, V2;int f[N][N];int main(){ cin >> V1 >> V2 >> n; memset(f, 0x3f, sizeof f); f[0][0]原创 2021-03-29 19:56:49 · 64 阅读 · 0 评论 -
单调队列优化多重背包
多重背包问题 III具体代码如下#include<iostream>#include<cstring>using namespace std;const int N = 20010;int n, m;int f[N], g[N], q[N];int main(){ cin >> n >> m; for(int i = 0; i < n; ++ i){ int v, w, s;原创 2021-03-25 20:22:28 · 76 阅读 · 0 评论 -
宠物小精灵之收服
宠物小精灵之收服这是一道二维费用01背包问题,具体分析如下:代码如下:#include<iostream>using namespace std;const int N = 1010, M = 510;int n, V1, V2;int f[N][M];int main(){ cin >> V1 >> V2 >> n; for(int i = 0; i < n; ++ i){ int v原创 2021-03-25 18:50:58 · 56 阅读 · 0 评论 -
最长公共上升子序列
最长公共上升子序列具体代码如下://时间复杂度O(n ^ 3)#include<iostream>#include<cstring>using namespace std;const int N = 3010;int n;int a[N], b[N];int f[N][N];int main(){ cin >> n; for(int i = 1; i <= n; ++ i) cin >> a[i];原创 2021-03-24 20:57:07 · 69 阅读 · 0 评论 -
方格取数、传纸条
方格取数传纸条具体代码如下#include<iostream>using namespace std;const int N = 15;int n;int w[N][N];int f[N * 2][N][N];int main(){ cin >> n; int a, b, c; while(cin >> a >> b >> c, a || b || c) w[a][b] += c;原创 2021-03-24 19:31:04 · 69 阅读 · 0 评论 -
滑雪
滑雪跟普通dfs差不多,添加一个记忆化数组具体代码如下#include<iostream>#include<cstring>using namespace std;const int N = 310;int n, m;int g[N][N], f[N][N];int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};int dp(int x, int y){ int &v = f[x][y];原创 2021-03-23 21:21:59 · 75 阅读 · 0 评论 -
没有上司的舞会
没有上司的舞会具体代码如下#include<iostream>#include<cstring>using namespace std;const int N = 6010;int n;int happy[N];int h[N], e[N], ne[N], idx;int f[N][2];bool has_fa[N];void add(int a, int b){ e[idx] = b, ne[idx] = h[a], h[a] = idx +原创 2021-03-23 21:00:06 · 49 阅读 · 0 评论 -
蒙德里安的梦想
蒙德里安的梦想具体代码如下#include<iostream>#include<cstring>using namespace std;const int N = 12, M = 1 << N;int n, m;long long f[N][M];bool st[M];int main(){ while(cin >> n >> m, n || m){ memset(f,原创 2021-03-23 20:39:24 · 69 阅读 · 0 评论 -
最短Hamilton路径
最短Hamilton路径具体代码如下#include<iostream>#include<cstring>using namespace std;const int N = 20, M = 1 << N;int n;int w[N][N];int f[M][N];int main(){ cin >> n; for(int i = 0; i < n; ++ i) for(int j =原创 2021-03-23 19:45:02 · 84 阅读 · 0 评论 -
石子合并
石子合并具体代码如下#include<iostream>using namespace std;const int N = 310;int n;int s[N], f[N][N];int main(){ cin >> n; for(int i = 1; i <= n; ++ i){ cin >> s[i]; s[i] += s[i - 1]; } for(in原创 2021-03-23 19:20:55 · 42 阅读 · 0 评论 -
最短编辑距离与编辑距离
最短编辑距离具体代码如下#include<iostream>using namespace std;const int N = 1010;int n, m;char a[N], b[N];int f[N][N];int main(){ cin >> n >> a + 1 >> m >> b + 1; for(int i = 1; i <= n; ++ i) f[i][0] = i;原创 2021-03-23 18:57:12 · 69 阅读 · 0 评论 -
最长公共子序列
最长公共子序列具体代码如下#include<iostream>using namespace std;const int N = 1010;int n, m;char a[N], b[N];int f[N][N];int main(){ cin >> n >> m >> a + 1 >> b + 1; for(int i = 1; i <= n; ++ i) for原创 2021-03-23 18:10:52 · 43 阅读 · 0 评论 -
最长上升子序列 I、II
题目代码如下#include<iostream>using namespace std;const int N = 1010;int n;int a[N], f[N];int main(){ cin >> n; for(int i = 1; i <= n; ++ i) cin >> a[i]; int res = -2e9; for(int i = 1; i <= n; ++ i){原创 2021-03-23 17:32:00 · 95 阅读 · 0 评论