动态规划
binggui2
这个作者很懒,什么都没留下…
展开
-
2021 icpc 南京 h 树形dp
代码中第55行那个位置我没想到,导致wa了几发。 这个题被卡在了t=3的讨论上面,其实把式子推出来发现只和最大值有关系,最大值必选。 子节点的选择和子节点为头节点的子树的选择无关。 #include <bits/stdc++.h> using namespace std; #define ll long long const int N = 1e5+10, M = 2*N; int n; int h[N], ne[M], e[M], idx; ll a[N], t[N]; ll sum[N]原创 2022-01-09 16:06:51 · 634 阅读 · 0 评论 -
Research Productivity Index
一道dp,比赛场上看出来是一个dp,可是只会暴力, 后来发现转移方程很简单,还是太菜了 #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 200; int n; double d[N]; double dp[N][N]; double c原创 2021-03-22 08:50:55 · 69 阅读 · 0 评论 -
线性DP
放格取数 先找到最大值后进行路径标记,然后再找一遍最大值这种方法是不对的, 问的是两个路径没有重复点的时候,总共的最大值 同一时间点时不能出现相同的点,如何判断同一时间呢, 因为该点只会向右或者向下,所以判断时间相同的标准为两点的xy相同 两个相同的时候也是有可能出现的,因为可能是出发的节点或者是结束节点 for (int k = 2; k <= n + n; k ++ ) for (int i1 = 1; i1 <= n; i1 ++ ) for (int i2原创 2020-10-02 19:48:23 · 74 阅读 · 0 评论 -
区间DP
石子合并 区间DP的状态表示一般是一个区间 f [ i , j ] 为 从 i 到 j 的区间合并成一个的代价,其中每次是把两个相邻区间进行合并, 那么i~j合并成一个区间那就是[i, k]和[k+1, j]合并成一个区间,还得把k遍历一遍 for(int i = 1; i <= n; i ++) s[i] += s[i-1]; for(int len = 2; len <= n; len ++){ for(int l = 1; l + len - 1原创 2020-10-02 19:41:20 · 83 阅读 · 0 评论 -
背包问题
01背包 二维数组代码 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const int N = 1010, M = 1010; int n, m; int dp[N][M]; int v[N], w[N]; int main(){ cin >> n >> m;原创 2020-10-02 11:26:43 · 74 阅读 · 0 评论