随笔分类 -  动态规划

摘要:题意 解析 找出每个可以分割的地方,然后看能不能选,01背包 代码 #include<bits/stdc++.h> using namespace std; const int N = 100 + 10; int n,m; int a[N],b[N],f[N],cnt,pos; int main() 阅读全文
posted @ 2023-02-16 16:22 Isaac233 阅读(10) 评论(0) 推荐(0) 编辑
摘要:题意 解析 前缀或双指针 代码 //前缀 #include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; int n,k; int a[N],b[N],c[N],d[N]; int main(){ scanf("%d %d", 阅读全文
posted @ 2023-02-16 16:21 Isaac233 阅读(15) 评论(0) 推荐(0) 编辑
摘要:题意 解析 官方解法dp f[i][j] 代表选到第i个字符串,全都和第i个字符串以j为首开始的部分一样的最小代价 f[i][j] = min(f[i][j],f[i-1][k]+j) (条件是第i-1个字符从k开始的部分和第i个字符串从j开始的部分相同) 答案为f[n][i]里的最小值 第一个字符 阅读全文
posted @ 2023-02-16 16:17 Isaac233 阅读(18) 评论(0) 推荐(0) 编辑
摘要:题意 解析 我写的朴素的二维前缀和,这样比较麻烦 可以这样, f1[i][j]代表当前行第一个到第j个的前缀和 f1[i][j]=f1[i][j-1]+a[i][j] f2[i][j]代表当前列第一个到第i个的前缀和 f2[i][j]=f2[i-1][j]+a[i][j] 判断f1[i][j],f2 阅读全文
posted @ 2023-02-16 16:13 Isaac233 阅读(11) 评论(0) 推荐(0) 编辑
摘要:题意 Polycarp在他的微博上发布了一张有趣的照片。他的很多朋友就开始在微博上转发这张图片,这个事情可以被一个字符串描述:name1 reposted name2,意思是说name1这个人转发了name2这个人。题目保证name1肯定是还没有转发过照片的,name2这个人已经有这个照片了。数据范 阅读全文
posted @ 2023-02-16 16:10 Isaac233 阅读(12) 评论(0) 推荐(0) 编辑
摘要:题意 输入 #1 ++-+- +-+-+ 输出 #1 1.000000000000 输入 #2 +-+- +-?? 输出 #2 0.500000000000 输入 #3 +++ ??- 输出 #3 0.000000000000 解析 我是找规律做的。算出最后总体的差值x,求出有cnt个问号。 假设正 阅读全文
posted @ 2022-12-30 00:05 Isaac233 阅读(16) 评论(0) 推荐(0) 编辑
摘要:题意 解析 水题,普及-,没意思 代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e5 + 10,M = 1e6 + 10; ll n,m,v[N],sum1[N],sum2[N 阅读全文
posted @ 2022-12-29 23:55 Isaac233 阅读(13) 评论(0) 推荐(0) 编辑
摘要:题意 解析 f[i][j]代表第i幅画最后一次被j画了所花的时间,受到两个的限制,画当前这个画的前一个画家画完了,当前这个画家画完了前面那张画了,取max。 代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; c 阅读全文
posted @ 2022-12-28 23:41 Isaac233 阅读(11) 评论(0) 推荐(0) 编辑
摘要:题意 解析 考察前缀知识。做的时候我好蠢,一直在想怎么前缀,大范围减小范围,怎么消除不同数字是否重复出现的影响。后来发现是自己蠢了,不就是求个后缀么。 代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; cons 阅读全文
posted @ 2022-12-28 00:10 Isaac233 阅读(10) 评论(0) 推荐(0) 编辑
摘要:题意 解析 前缀和水题,就是在所有长度为k的区间里找个最小的。 代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 2e5 + 10,M = 1e6 + 10; int n,m,a[N 阅读全文
posted @ 2022-12-28 00:08 Isaac233 阅读(9) 评论(0) 推荐(0) 编辑
摘要:题意 解析 纯暴力枚举,先计算总1数。第一维枚举左端点,第二维枚举右端点,第三维从左端点跑到右端点计算当前区间如果原来是1则减1,原来是0则加1。 前缀和优化。一个翻转是1-a[x],区间反转就是这个区间长度-区间和,然后加上剩余的区间和即可。 区间DP。f[i][j]代表的是将i~j这段反转后的最 阅读全文
posted @ 2022-12-28 00:06 Isaac233 阅读(12) 评论(0) 推荐(0) 编辑
摘要:题意 解析 前缀和思想。 f[i]用来代表到第i+1位有多少个满足s[k] == s[k+1] 所以题目求从l~r,即求f[r-1] - f[l-1] 代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; cons 阅读全文
posted @ 2022-12-28 00:01 Isaac233 阅读(11) 评论(0) 推荐(0) 编辑
摘要:题意 最后要形成形如前面从1~k范围内全为负数,从k+1~n范围内全为正数,没有0的存在, 那此时最少应该改变几个值。 解析 ca[i]统计前面到i一共有多少个>=0的,cb[i]代表后面到i一共有多少个<=0的 划分分界点k,求最小的ca[k] + cb[k+1]。 代码 #include<bit 阅读全文
posted @ 2022-12-27 23:59 Isaac233 阅读(18) 评论(0) 推荐(0) 编辑
摘要:题意 解析 3个物品的完全背包。f[i][j]代表选到第i件物品此时恰凑成长度j的数量的最大值 代码 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 4000 + 10,M = 1e6 阅读全文
posted @ 2022-12-27 23:54 Isaac233 阅读(14) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示