随笔分类 - 题解
摘要:这是题目吗? 显然的DP,讲几个重要的地方 1.贪心:让吃饭时间长的先排队(证明从略) 2.状态: f[i][j][k]代表前i个人,一号时间j,二号时间k显然MLE 所以压缩成f[i][j]代表前i个人,一号时间j,用前缀和维护时间,s[i]-j就是二号的时间 Code: 1 #include<b
阅读全文
摘要:别碰我! 自己还是太蒟了…… 看了好久,最后抄参考题解打出来的…… 前面的可能影响后面的,所以按照询问右端点排序 这时候维护一个前缀和数组就可以了, 那么问题又来了,去重? 可以这样,从前往后枚举,如果被加过了就在前面去掉 具体看代码(题目毒瘤导致卡常卡了好几遍): 1 #include<bits/
阅读全文
摘要:题目戳我 很明显的这题是一道dp,主要讲一下几个细节 1.初始化 我们需要初始化边界情况也就是一个字符串为空的情况 # # # # A:aaaaaa A:□□□□□□ B:□□□□□□ or B:bbbbbb # # # # 这时f[i][0]=i*k,f[0][j]=j*k。 另外注意都为空也就是
阅读全文
摘要:这道题可以用各种算法踩掉,我选择的是SPFA。 因为题目要求计数,所以我们开一个ans数组表示数量。 分两种情况讨论: 一:dis_v>dis_u+1 最短路被更新了,可以直接ans_v=ans_u覆盖。 二:dis_v==dis_u+1 又找到一条最短路,将条数相加即可。 具体看代码: #incl
阅读全文
摘要:这是一道还算简单的树型dp。 转移方程:f[i]=max(f[j],0) 其中i为任意非叶节点,j为i的一棵子树,而每棵子树都有选或不选两种选择 具体看代码: #include<bits/stdc++.h> using namespace std; int n; struct Edge { int
阅读全文
摘要:这道题的关键是利用Floyd算法的性质求转换方案,算是Floyd的一个变形,具体可以看代码。 题目 1 #include<bits/stdc++.h> 2 using namespace std; 3 string n; 4 int k; 5 6 bool f[15][15];//表示数字之间是否能
阅读全文

浙公网安备 33010602011771号