Codeforces 225C Barcode(矩阵上DP)
题目链接:http://codeforces.com/contest/225/problem/C
题目大意:
给出一个矩阵,只有两种字符'.'和'#',问最少修改多少个点才能让每一列的字符一致,且字符一致的连续的列的宽度在x和y之间。
解题思路:
先求出每列‘.’和'#'的前缀和,sum[i][0]表示前i列'#' 的前缀和,sum[i][1]表示前i列'.' 的前缀和 ,因为修改要求每列都保持一直,其实我们可以将每列都当成一个点来看,那样我们就相当于是在一维序列上操作了。
dp[i][0]表示最后一列为'.'的最优解,dp[i][1]表示最后一列为'#'的最优解 。
那么我们可以得到状态转移方程:
dp[i+j][0]=min(dp[i+j][0],dp[i][1]+sum[i+j][0]-sum[i][0]),x=<j<=y,0<=i<=m
dp[i+j][1]=min(dp[i+j][1],dp[i][0]+sum[i+j][1]-sum[i][1]),x=<j<=y,0<=i<=m
其实很好理解,dp[i+j][0]表示第i+j列为'.',那么可以由相差为j的第i列为'#'的状态推导过来,同时要将i+1~j的'#'都变为'.'
dp[i+j][1]同理。
代码:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
#include<string>
#include<string.h>
#include<cctype>
#include<math.h>
#include<stdlib.h>
#include<stack>
#include<queue>
#include<set>
#include<map>
#define lc(a) (a<<1)
#define rc(a) (a<<1|1)
#define MID(a,b) ((a+b)>>1)
#define fin(name) freopen(name,"r",stdin)
#define fout(name) freopen(name,"w",stdout)
#define clr(arr,val) memset(arr,val,sizeof(arr))
#define _for(i,start,end) for(int i=start;i<=end;i++)
#define FAST_IO ios::sync_with_stdio(false);cin.tie(0);
using namespace std;
typedef long long LL;
const int N=3e3+;
const LL INF64=1e18;
const int INF=0x3f3f3f3f;
const double eps=1e-; int dp[N][]; //dp[i][0]表示最后一列为'.'的最优解,dp[i][1]表示最后一列为'#'的最优解
int sum[N][]; //sum[i][0]表示前i列'#' 的前缀和,sum[i][1]表示前i列'.' 的前缀和 int main(){
memset(dp,0x3f,sizeof(dp));
FAST_IO;
int n,m,x,y;
cin>>n>>m>>x>>y;
for(int i=;i<=n;i++){
for(int j=;j<=m;j++){
char x;
cin>>x;
if(x=='#')
sum[j][]++;
else
sum[j][]++;
}
}
for(int i=;i<=m;i++){
sum[i][]+=sum[i-][];
sum[i][]+=sum[i-][];
} dp[][]=dp[][]=;
for(int i=;i<=m;i++){
for(int j=x;j<=y;j++){
dp[i+j][]=min(dp[i+j][],dp[i][]+sum[i+j][]-sum[i][]);
dp[i+j][]=min(dp[i+j][],dp[i][]+sum[i+j][]-sum[i][]);
}
}
cout<<min(dp[m][],dp[m][])<<endl;
return ;
}
Codeforces 225C Barcode(矩阵上DP)的更多相关文章
- CodeForces 225C Barcode DP
也是一道dp ,想到了就会觉得很巧妙 矩阵中只有白块和黑块,要求repaint后满足下述条件: 每列一种颜色 根据输入范围x, y 要求条纹宽度在[x, y] 之间 数据范围: n, m, x and ...
- Codeforces 918D MADMAX 图上dp 组合游戏
题目链接 题意 给定一个 \(DAG\),每个边的权值为一个字母.两人初始各占据一个顶点(可以重合),轮流移动(沿着一条边从一个顶点移动到另一个顶点),要求每次边上的权值 \(\geq\) 上一次的权 ...
- CF思维联系–CodeForces - 225C. Barcode(二路动态规划)
ACM思维题训练集合 Desciption You've got an n × m pixel picture. Each pixel can be white or black. Your task ...
- Educational Codeforces Round 62 E 局部dp + 定义状态取消后效性
https://codeforces.com/contest/1140/problem/E 局部dp + 定义状态取消后效性 题意 给你一个某些位置可以改变的字符串,假如字符串存在回文子串,那么这个字 ...
- DAG上dp思想
DAG上DP的思想 在下最近刷了几道DAG图上dp的题目.要提到的第一道是NOIP原题<最优贸易>.这是一个缩点后带点权的DAG上dp,它同时规定了起点和终点.第二道是洛谷上的NOI导刊题 ...
- 从《彩色圆环》一题探讨一类环上dp的解法
清橙A1202 bzoj2201 bsoj4074 试题来源 2010中国国家集训队命题答辩 问题描述 小A喜欢收集宝物.一天他得到了一个圆环,圆环上有N颗彩色宝石,闪闪发光.小A很爱惜这个圆环,天天 ...
- Codevs 1305 Freda的道路(矩阵乘法 DP优化)
1305 Freda的道路 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description Freda要到Rainbow的城堡去玩了.我们可以认 ...
- 洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速$dp\&Floyd$)
洛谷P3502 [POI2010]CHO-Hamsters感想及题解(图论+字符串+矩阵加速\(dp\&Floyd\)) 标签:题解 阅读体验:https://zybuluo.com/Junl ...
- [BZOJ 4818/LuoguP3702][SDOI2017] 序列计数 (矩阵加速DP)
题面: 传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=4818 Solution 看到这道题,我们不妨先考虑一下20分怎么搞 想到暴力,本蒟 ...
随机推荐
- python之旅:文件处理
一 文件操作及理论 1. 介绍 计算机系统分为:计算机硬件.操作系统.应用程序三部分我们用python或者其他程序,想要把数据永久的保存下来,就得写到硬盘里,但是应用程序是没有办法直接操作硬件的,这就 ...
- golang简单实现二叉树的数据添加和遍历
代码实现 package tree import "fmt" type Node struct { elem interface{} left, right *Node } typ ...
- PHP正则表达式基本语法
本章主要学习正则表达式的基本语法: 正则表达式就是一个匹配的模式,正则表达式本身也就是一个字符串(有一些语法规则,特殊符号组成) 正则表达式这个字符串一定要在对应的函数中使用才有意义(分割,替换函数结 ...
- 线性判别分析 LDA
点到判决面的距离 点\(x_0\)到决策面\(g(x)= w^Tx+w_0\)的距离:\(r={g(x)\over \|w\|}\) 广义线性判别函数 因任何非线性函数都可以通过级数展开转化为多项式函 ...
- OneProxy实现mysql读写分离
OneProxy for MySQL可以复用不同应用到后端数据库的连接,有效降低数据库的并发连接数:可以即时踢除不可用的节点,将应用请求转发到其他可用节点,保证业务服务的稳定性. 可透明地将查询语句分 ...
- GO_04:GO语言基础条件、跳转、Array和Slice
1. 判断语句if 1. 条件表达式没有括号(这点其他语言转过来的需要注意) 2. 支持一个初始化表达式(可以是并行方式,即:a, b, c := 1, 2, 3) 3. 左大括号必须和条件语句或 e ...
- Hadoop生态圈-HBase性能优化
Hadoop生态圈-HBase性能优化 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- python---基础知识回顾(九)图形用户界面-------Tkinter
前戏:老牌python GUI程序(Tkinter) import tkinter.messagebox as messagebox class Application(Frame): def __i ...
- CentOS6.5本地yum源配置
1. 建立本地源目录及挂载临时目录 2. 挂载光盘 3. 进入/etc/yum.repos.d/目录,将 CentOS-Base.repo CentOS-Debuginfo.repo CentOS-V ...
- Nginx跳转Tomcat
conf配置: server { listen 80; server_name www.-------.com; server_name_i ...