摘要: 记录一下前面的递增递减状态,再记录一下前一个数,3维状态。 下附代码: 1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 const ll MOD=1e9+7; 5 ll dim[105]; 6 ll 阅读全文
posted @ 2021-02-04 12:47 我是菜狗QAQ 阅读(83) 评论(0) 推荐(0) 编辑
摘要: 这道题用了正难则反的思想,毕竟正面求回文很麻烦,不知道长度也不知道位置。 但是可以求不构成回文的数然后做补集。 dp[i][j][k]表示前i位前两个数字是j,前一个数字是k,不构成回文的数量。 注意消除前导零的影响。 下附代码: 1 #include<bits/stdc++.h> 2 #defin 阅读全文
posted @ 2021-02-04 12:06 我是菜狗QAQ 阅读(70) 评论(0) 推荐(0) 编辑
摘要: 这道题的状态其实很好想,dp[x][st][sum]表示前x位原数是st和是sum的个数。 问题是原数太大了,状态开不下。 因为这道题我们实际上要的是st%sum,而sum最大只有172,所以不妨对st取个模,如果st%mod==0,sum%mod==0,那么st%mod==0. 因为这里模数最多只 阅读全文
posted @ 2021-02-03 19:35 我是菜狗QAQ 阅读(73) 评论(0) 推荐(0) 编辑
摘要: 比较普通的数位DP,有个要注意的地方就是状态应该要是2维的 dp[i][j]表示前i位个数为j的数量,这样的话,后续加上去一位数字之后才能统计到之前本来就有的。 另外开两维,一维是表示统计的数字,还有一维标记前导零。 下附代码: 1 #include<bits/stdc++.h> 2 #define 阅读全文
posted @ 2021-02-03 18:51 我是菜狗QAQ 阅读(46) 评论(0) 推荐(0) 编辑
摘要: 经典数位DP 虽然题目给的n非常大,但是其实只有可能是质因子2357组成的数,所以事先打个表就行,总共是5000多个数。 然后就是做普通的数位DP,注意这里需要处理前导零,毕竟前导零对乘积是有影响的 下附代码: 1 #include<bits/stdc++.h> 2 #define ll unsig 阅读全文
posted @ 2021-02-03 18:12 我是菜狗QAQ 阅读(55) 评论(0) 推荐(0) 编辑
摘要: 数位DP板子题。 DP[i][j]记录到第i位前一位数字是j的数字数。 下附代码: 1 #include<bits/stdc++.h> 2 using namespace std; 3 int dp[20][15]; 4 int dim[20]; 5 int dfs(int x,int st,int 阅读全文
posted @ 2021-02-03 18:09 我是菜狗QAQ 阅读(80) 评论(0) 推荐(0) 编辑
摘要: 这道题一开始用了一种错误的DP思路 T T ,错误的把除了最外面4个点以外其他点左右的情况当做了对称的(肯定不是对称的啊啊啊!!) 因为题目前两个样例都是5,非常的小,所以感觉还很对,当然后面会错。 其实离正确的思路差的不是很多,但是最妙的一步没想到。 我们以dp[i][j]表示走了i步刚好到j点的 阅读全文
posted @ 2021-02-02 17:39 我是菜狗QAQ 阅读(70) 评论(0) 推荐(0) 编辑
摘要: C: 很简单一道签到题,3不用管,把1和2先尽可能合并掉,然后剩下的自己合并。 打的时候2合并了两次一直算成代价2,死活过不去 本周+5道罚题 下附代码: 1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 阅读全文
posted @ 2021-01-31 21:15 我是菜狗QAQ 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 一道平面分治的板子题(做之前刚学会平面分治,太菜了) 把所有点按照x排序后,分成左半边的最近距离和右半边的最近距离,再以中点为圆心,目前的最近距离为半径,做这个圆内的枚举,求最短距离。 注意:sqrt()里面的数如果是int类型会比double类型慢,如果次数多了会T 代码如下: 1 #includ 阅读全文
posted @ 2021-01-30 17:06 我是菜狗QAQ 阅读(47) 评论(0) 推荐(0) 编辑
摘要: A题: 容斥原理直接除就行; 代码: 1 #include<bits/stdc++.h> 2 #define ll long long 3 using namespace std; 4 int main(){ 5 int T; 6 scanf("%d",&T); 7 while (T--){ 8 l 阅读全文
posted @ 2021-01-30 01:04 我是菜狗QAQ 阅读(28) 评论(0) 推荐(0) 编辑