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相关推荐

  1. CodeForces - 225C. Barcode(DP)

    C. Barcode Desciption You've got an n × m pixel picture. Each pixel can be white or black. Your task ...

  2. CF思维联系–CodeForces - 225C. Barcode(二路动态规划)

    ACM思维题训练集合 Desciption You've got an n × m pixel picture. Each pixel can be white or black. Your task ...

  3. Codeforce C. Barcode

    C. Barcode time limit per test 2 seconds memory limit per test 256 megabytes input standard input ou ...

  4. dp,sp,px相互转化

    方法一: public int sp2px(float sp) {return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, ...

  5. [JS][dp]题解 | #打家劫舍(一)#

    题解 | #打家劫舍(一)# 题目链接 打家劫舍(一) 题目描述 描述 你是一个经验丰富的小偷,准备偷沿街的一排房间,每个房间都存有一定的现金,为了防止被发现,你不能偷相邻的两家,即,如果偷了第一家, ...

  6. HDU 2084 数塔(DP)(JAVA版)

    数塔 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...

  7. dp cf 20190615

    A. Timofey and a tree 这个不算是dp,就是一个思维题,好难想的思维题,看了题解才写出来的, 把点和边分开,如果一条边的两个点颜色不同就是特殊边,特殊边两边连的点就叫特殊点, 如果 ...

  8. BZOJ 1003[ZJOI2006]物流运输(SPFA+DP)

    Problem 1003. -- [ZJOI2006]物流运输 1003: [ZJOI2006]物流运输 Time Limit: 10 Sec  Memory Limit: 162 MB Submit ...

  9. [NOI2005]聪聪与可可(期望dp)

    题意:给一张无向图,有一只猫和一只老鼠,猫每秒会向老鼠的方向移动两个单位,若它们的距离为一,那么只会移动一个单位,老鼠会等概率向周围移动一步或不动,求猫抓到老鼠的期望时间. Solution luog ...

最新文章

  1. Spring 学习笔记
  2. VTK与Qt整合的示例
  3. Action访问Servlet API的对象
  4. Bullmind-在线UML软件工具箱
  5. How to find unit test class by code
  6. 吉林省计算机二级证书用英语怎么说,吉林省全国高等学校计算机水平考试二级...
  7. q-dir 打不开文件_Q-Dir –多窗格文件管理器
  8. Java 面试题(3)—— JVM
  9. gp3688 uhf2扩频_摩托罗拉GP3688对讲机(VHF、UHF)对讲机维修
  10. 神经网络有趣案例_求解三体问题快了1亿倍,新型神经网络问世
  11. 编译原理:有穷自动机(DFA与NFA)
  12. 用ntsd -c q -p PID 杀进程
  13. 苹果6s强制删除id锁_苹果ID锁安全神话破灭!2分钟就能解锁
  14. mysql-入门教程
  15. c语言处理系统步骤,c语言源代码【处理步骤】
  16. 身份证识别APP、H5端部署,助力疫情防控人员信息采集
  17. JS混入(mix-in)小案例
  18. 微信公众号获取用户地理位置
  19. 纸的大小图解_手工折纸大全图解 不一定是A4大小)一般都有7
  20. iOS 朋友圈点赞评论,发布朋友圈,想要的都有

热门文章

  1. 321. Create Maximum Number 解题方法详解
  2. CentOS下的freenx配置
  3. maximo 自定义高级数据选择对话框(非表域实现)
  4. package.json和package-lock.json
  5. ModuleNotFoundError: No module named 'oscar.app'
  6. Adadelta原文解读
  7. 修改octave的editor的背景颜色
  8. RabbitMQ 队列消息持久化
  9. 图像工程之图像处理 CH1绪论
  10. NLP, 知识图谱参考资源