- 博客(18)
- 收藏
- 关注
原创 解决时间显示与其他内容显示切换的问题
解决时间显示与其他内容显示切换的问题对于时间来说可以写一个线程单独运行每一秒给显示终端推送当前的时间就好了,但是如果这个时候要显示别的内容该如何解决呢。这里采取了有限自动机的思路这样就可以在系统内维护一个有限自动机,然后通过对于当前状态的判断显示正确的内容。class ShowSys: def __init__(self): # 0 for time mode 1 for recipe mode # 自动机设计 self.mode = 0
2022-03-19 20:58:31 380
原创 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 192 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 202
原创 NEUOJ 短信文字识别
NEUOJ 短信文字识别题面阿诚的胳膊被卡住了,拔不出来。不过身边有一台实体按键的手机,这样就可以盲打发短信来求救了(真庆幸不是触屏手机),但是这个手机发送的日文短信。即使看不见画面也应该能发邮件。我认为朋友们很聪明,他们会给我正确的解释,但我现在发送的信息可能与我真正想发送的信息不同。这种手机字符输入方法与广泛使用的方法相同,例如,使用“1”按钮输入“あ”行的平假名字符。“1”代表“あ”,“11”代表“い”,以此类推,“11111”代表“お”。平假名是循环的,即“111111”也是“あ”。“か”行使
2022-03-08 01:00:18 197
原创 E - Snuke‘s Subway Trip
E - Snuke’s Subway Triphttps://atcoder.jp/contests/arc061/submissions/me对于这道题进行一个拆点的操作就可以了。我们可以对于每一个点维护其对于每一种公司的一个点,但这样会爆空间,所以拿map存一下需要的点就行了。拆点的策略是 x->y 拆为 x->add1,add1->add2,add2->y,权值分别取1,0,1.由于add1,add2表示x->y 在同为val公司下的新点,这样就能够表示他们之间在v
2022-03-07 16:05:27 176
原创 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 113
原创 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 123
原创 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 216
原创 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 172
原创 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 183
原创 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 110
原创 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 256
原创 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 195
原创 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 128
原创 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 120
原创 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 404
原创 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 140
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人