![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
动态规划
Godhui_
这个作者很懒,什么都没留下…
展开
-
ATC DP X - Tower
ATC DP X - Towerhttps://atcoder.jp/contests/dp/tasks/dp_x如果s2-w1>s1-w2,即s2+w2>s1+w1,也就是s2放在底下上面留出的剩余质量会更多,显然更好。重点是为什么要排序?排序可以保证枚举的正确性,因为这样的顺序使得物品都是具备一定要放在前面的砖底下的性质。这样就只需要确定性的放在底下就好了。那么转移就变成了 dp[j+w]=max(dp[j+w],dp[j]+brick[i].v)dp[j+w] = max(dp[j原创 2022-03-09 16:56:15 · 149 阅读 · 1 评论 -
ATC DP W - Intervals
ATC DP W - Intervals定义出f[i]为第i个位置选1后的方案的最大值。那么f[i]=f[i−1]+在区间里的分数f[i] = f[i-1] + 在区间里的分数f[i]=f[i−1]+在区间里的分数这个东西用线段树维护一下就好了,每次在区间末尾的时候给区间里的f[i]f[i]f[i] 加上一个区间的分数就好了。#include<cstdio>#include<iostream>#include<iomanip>#include<stri原创 2022-03-08 01:09:58 · 148 阅读 · 0 评论 -
NEUOJ 短信文字识别
NEUOJ 短信文字识别题面阿诚的胳膊被卡住了,拔不出来。不过身边有一台实体按键的手机,这样就可以盲打发短信来求救了(真庆幸不是触屏手机),但是这个手机发送的日文短信。即使看不见画面也应该能发邮件。我认为朋友们很聪明,他们会给我正确的解释,但我现在发送的信息可能与我真正想发送的信息不同。这种手机字符输入方法与广泛使用的方法相同,例如,使用“1”按钮输入“あ”行的平假名字符。“1”代表“あ”,“11”代表“い”,以此类推,“11111”代表“お”。平假名是循环的,即“111111”也是“あ”。“か”行使原创 2022-03-08 01:00:18 · 153 阅读 · 0 评论 -
ATC DP U Grouping
ATC DP U GroupingDP Grouping先计算出每一种集合情况下只分一组的情况再全部扫一遍枚举每个集合的一个真子集,然后根据这个子集把当前集合分成两组,统计最大的情况就好了。感觉比较类似于区间DP。里面枚举真子集的方法也很好。#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <set>#include原创 2022-03-05 02:50:49 · 88 阅读 · 0 评论 -
ATC DP T - Permutation
ATC DP T - PermutationT - Permutation个人觉得难度拉满dp[i][j]dp[i][j]dp[i][j] 表示对于第i个符号(i从0开始)来说1-(i-1)中以j结尾的方案数对于<<<显然dp[i][1]=0dp[i][1]=0dp[i][1]=0 因为1放在末尾是不可能有比1小的数此时对于j = 2…i+1来讲有两种构造方案对于dp[i][j−1]dp[i][j-1]dp[i][j−1] 是将这种构造方案中最后一位的j-1与前面构造中的原创 2022-03-02 01:30:23 · 84 阅读 · 0 评论 -
ATC DP S - Digit Sum(数位dp)
ATC DP S - Digit Sum(数位dp)S - Digit Sum数位dp板子题,注释很详细了。#include <iostream>#include <cstdio>#include <cstring>#include <vector>#include <set>#include <unordered_map>#include <cstring>using namespace std;c原创 2022-03-01 23:46:43 · 173 阅读 · 0 评论 -
ATC DP Q - Flowers
ATC DP Q - Flowershttps://atcoder.jp/contests/dp/tasks/dp_q参考最长上升子序列,这样做事O(n2)O(n^2)O(n2)后来发现只需要从比当前高度小的里面挑出来那个美丽值最大的就好了,然后以高度为界限维护美丽值的最大值就好了。可以用树状数组或者线段树。#include <iostream>#include <cstdio>#include <cstring>#include <vector&g原创 2022-02-28 23:53:57 · 125 阅读 · 0 评论 -
NEUOj 涂色
NEUOj 涂色没找到ATC里面对应哪个题。就把题直接粘贴过来了Problem Statement有一棵有N个节点的树,节点编号为1,2,…,N,对每个i (1≤i≤N−1),第i条边连着x**i和y**i节点。Taro 决定将每个节点都涂成黑色或者白色,不能将两个相邻的节点同时涂黑。找到他能涂色的方案数并对1e9+7取模。Constraints所有输入均为整数1≤N≤1e51≤x**i,y**i≤N所给图是一棵树InputNx1 y1..xN yNOutput输出原创 2022-02-28 20:37:51 · 160 阅读 · 0 评论 -
ATC DP R Walk
ATC DP R Walkhttps://atcoder.jp/contests/dp/tasks/dp_r这里AnA^nAn中,A[i][j]A[i][j]A[i][j]表示的是从i出发走到点j走n步,有多少种走法。理解的话看这里:https://blog.csdn.net/u011251225/article/details/44421853感谢这位dalao#include <iostream>#include <cstdio>using namespace s原创 2022-02-28 19:23:01 · 71 阅读 · 0 评论 -
ATC DP O Matching
ATC DP O Matchinghttps://atcoder.jp/contests/dp/tasks/dp_odp[i][j]dp[i][j]dp[i][j] 表示第i个人时选取的女孩集合为j时的方案数那么转移方程为dp[i][j]+=dp[i−1][j−(1<<k)]dp[i][j] += dp[i-1][j-(1<<k)]dp[i][j]+=dp[i−1][j−(1<<k)] 其中k为能与第j个人配对的女孩一种合理的转移方式是从小到大枚举集合再枚举当前i原创 2022-02-28 19:08:21 · 219 阅读 · 0 评论 -
ATC DP N Slimes
ATC DP N Slimeshttps://atcoder.jp/contests/dp/tasks/dp_n就采取区间更新的策略就好了,先枚举大区间然后枚举区间的中断点,选取最合适的中断点即可。dp[st][len]=min(dp[st][len],dp[st][cut−st+1]+dp[cut+1][ed−cut]);dp[st][len] = min(dp[st][len], dp[st][cut - st + 1]+dp[cut+1][ed-cut]);dp[st][len]=min(dp[原创 2022-02-28 18:00:59 · 153 阅读 · 0 评论 -
ATC DP M Candies
ATC DP M Candieshttps://atcoder.jp/contests/dp/tasks/dp_mdp[i][j]dp[i][j]dp[i][j] 代表到第 i 个人为止 吃了 j 颗糖的方案数一个朴素的转移方程是// 第一层循环遍历孩子// 第二层循环遍历所有可能的糖果数量(上一层的)// 第三层循环是遍历这些孩子取1-a[i](取0就是上一层一样)后从上一层的dp[j] 直接转移过来for (int i=1;i<=n;++i) { for (int j=k;~j;原创 2022-02-28 17:54:36 · 89 阅读 · 0 评论 -
ATC DP L Deque
ATC DP L Dequehttps://atcoder.jp/contests/dp/tasks/dp_ldp[i][j]dp[i][j]dp[i][j] 表示 i-j 这一段的答案。这个题两个人的目标是分别最大化 (X-Y)和最小化(X-Y).可以发现这两个人的目标恰好是相反的,即可以认为第二个人的目标为最大化-(X-Y).此时可以发现只要将上一个人的值直接取相反数就是当前人最有利的情况,只需要在此基础上进行dp就好了。这体现在 −dp[i+1][j]和−dp[i][j−1]-dp[i+1]原创 2022-02-28 16:51:37 · 86 阅读 · 0 评论 -
ATC DP K Stones
ATC DP J Stonesdp[i] = 1 先手必败 =0 后手必败当下一个状态中全都不是先手必败状态即当前位置必为先手必败。#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <queue>#include <iostream>using namespace std;typedef long lon原创 2022-02-12 18:01:32 · 367 阅读 · 0 评论 -
ATC DP J shushi
ATC DP J shushi对于E(d+1,a−1,b,c)E(d+1,a-1,b,c)E(d+1,a−1,b,c) 其实这个问题中只有三个随机变量,而第一项空盘数是通过其余三项算出来的,所以在推导的时候第一项是没有意义的。理解了这里就直接照着公式写代码就好了// dp[i][j][k] 分别表示有1,2,3个寿司的盘子数量#include <cstdio>#include <cstring>#include <algorithm>#include &l原创 2022-02-12 17:01:51 · 101 阅读 · 0 评论