C. Barcode dp
https://codeforces.com/problemset/problem/225/C
这个题目和之前一个题目很像 https://www.cnblogs.com/EchoZQN/p/10900373.html
只是这个数据范围更大一些,
不过刚开始我真的没有看出来。。。。
这个就是整列整列的处理,所以还是一样枚举当前的连续的j
dp[i][j][k] 这个k只有两个取值,一个是0,一个是1,0 代表白色,1代表黑色。
这个定义就是dp[i][j][0] 前面i个连续j个白色的列需要粉刷的最少的砖的数量。
另外一个同样,
所以按照之前的想法,很贱的就可以知道会有两种情况,一个是j==1 那就说明是之前的情况推过来的,因为之前的这个j不确定,
所以这里要枚举每一种情况。
#include<cstdio> #include<iostream> #include<algorithm> #include<cmath> #include<cstring> #include<string> #include<queue> #include<vector> #define inf 0x3f3f3f3f #define debug(x) cout<<"-----"<<" x = "<<x<<"-----"<<endl using namespace std; typedef long long ll; const int maxn = 5e3 + 10; ll dp[1010][1010][2]; char s[1010][1010]; int b[1010], w[1010]; int main() {int n, m, x, y;scanf("%d%d%d%d", &n, &m, &x, &y);for (int i = 1; i <= n; i++) scanf("%s", s[i] + 1);for(int j=1;j<=m;j++){for(int i=1;i<=n;i++){if (s[i][j] == '.') w[j]++;else b[j]++;}}memset(dp, inf, sizeof(dp));dp[1][1][0] = b[1];dp[1][1][1] = w[1];for(int i=1;i<=m;i++){for(int j=1;j<=y&&j<=i;j++){if(j!=1){dp[i][j][0] = dp[i-1][j-1][0] + b[i];dp[i][j][1] = dp[i-1][j-1][1] + w[i];}else{for(int k=x;k<=y;k++){dp[i][j][0] = min(dp[i][j][0], dp[i-1][k][1] + b[i]);dp[i][j][1] = min(dp[i][j][1], dp[i-1][k][0] + w[i]);}}// printf("dp[%d][%d][0]=%lld\n", i, j, dp[i][j][0]);// printf("dp[%d][%d][1]=%lld\n", i, j, dp[i][j][1]); }}ll ans = inf;for(int i=x;i<=y;i++){ans = min(ans, dp[m][i][0]);ans = min(ans, dp[m][i][1]);}printf("%lld\n", ans);return 0; }
转载于:https://www.cnblogs.com/EchoZQN/p/10904952.html
C. Barcode dp相关推荐
- CodeForces - 225C. Barcode(DP)
C. Barcode Desciption You've got an n × m pixel picture. Each pixel can be white or black. Your task ...
- CF思维联系–CodeForces - 225C. Barcode(二路动态规划)
ACM思维题训练集合 Desciption You've got an n × m pixel picture. Each pixel can be white or black. Your task ...
- Codeforce C. Barcode
C. Barcode time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...
- dp,sp,px相互转化
方法一: public int sp2px(float sp) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, ...
- [JS][dp]题解 | #打家劫舍(一)#
题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...
- HDU 2084 数塔(DP)(JAVA版)
数塔 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- dp cf 20190615
A. Timofey and a tree 这个不算是dp,就是一个思维题,好难想的思维题,看了题解才写出来的, 把点和边分开,如果一条边的两个点颜色不同就是特殊边,特殊边两边连的点就叫特殊点, 如果 ...
- BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)
Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec Memory Limit: 162 MB Submit ...
- [NOI2005]聪聪与可可(期望dp)
题意:给一张无向图,有一只猫和一只老鼠,猫每秒会向老鼠的方向移动两个单位,若它们的距离为一,那么只会移动一个单位,老鼠会等概率向周围移动一步或不动,求猫抓到老鼠的期望时间. Solution luog ...
最新文章
- Spring 学习笔记
- VTK与Qt整合的示例
- Action访问Servlet API的对象
- Bullmind-在线UML软件工具箱
- How to find unit test class by code
- 吉林省计算机二级证书用英语怎么说,吉林省全国高等学校计算机水平考试二级...
- q-dir 打不开文件_Q-Dir –多窗格文件管理器
- Java 面试题(3)—— JVM
- gp3688 uhf2扩频_摩托罗拉GP3688对讲机(VHF、UHF)对讲机维修
- 神经网络有趣案例_求解三体问题快了1亿倍,新型神经网络问世
- 编译原理:有穷自动机(DFA与NFA)
- 用ntsd -c q -p PID 杀进程
- 苹果6s强制删除id锁_苹果ID锁安全神话破灭!2分钟就能解锁
- mysql-入门教程
- c语言处理系统步骤,c语言源代码【处理步骤】
- 身份证识别APP、H5端部署,助力疫情防控人员信息采集
- JS混入(mix-in)小案例
- 微信公众号获取用户地理位置
- 纸的大小图解_手工折纸大全图解 不一定是A4大小)一般都有7
- iOS 朋友圈点赞评论,发布朋友圈,想要的都有