Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) D. Minimum path(字典序)
https://codeforces.com/contest/1072/problem/D
题意
给你一个n*n充满小写字母的矩阵,你可以更改任意k个格子的字符,然后输出字典序最小的从[1,1]到[n,n]的路径(1<=n<=2000)
思路
我的
- 定义dp[i][j]为从[1,1]到[i,j]字符串最小的字符串,然后枚举所有i-1+j-1+1<=k的点,然后字符串连接比较,代表更改前面i,j个字符
- 这种思路有两个问题,如何处理出从[i,j]到[n,n]的最小字典序字符串,第二假如i+j个字符中存在'a'的话那么修改次数可以往后使用,这两点都是这个思路没有考虑到的
标解
- 我们如何得到字典序最小的字符串?(逐位确定法)
- 固定了步数,我们就可以知道所有这个步数能到达的格子。然后我们枚举步数就等于在模拟走的过程,需要纵向比较所有当前步数所能到达的格子的字符大小,选取最小的继续走,比他大的就不用继续了,这样就能保证得到的字符串是最小的
- 怎么处理最多只能修改k个格子?
- 假如这个格子是'a',那么这个格子就不用再修改
- 而对于一条还能修改的路径来说,越多的a,意味着剩下还能修改的格子越多,
- 定义dp[i][j]代表到i,j最少a的路径a的数量,
- dp[i][j]=min(dp[i-1][j],dp[i][j-1])+(s[i][j]!='a');
- 假如dp[i][j]<=k,那么s[i][j]可以修改为a
#include<bits/stdc++.h>
#define M 2005
using namespace std;
int n,k,i,j,p,vi[M][M],f[M][M];
char s[M][M],mi;
int main(){
cin>>n>>k;
for(i=1;i<=n;i++)scanf("%s",s[i]+1);
memset(f,1,sizeof(f));
f[0][1]=0;
for(i=1;i<=n;i++)for(j=1;j<=n;j++){
f[i][j]=min(f[i-1][j],f[i][j-1])+(s[i][j]=='a'?0:1);
if(f[i][j]<=k)s[i][j]='a';
}
vi[1][1]=1;
for(p=2;p<=2*n;p++){
mi='z';
for(i=1;i<=n;i++)if(p-i>=1&&p-i<=n&&vi[i][p-i])mi=min(mi,s[i][p-i]);
putchar(mi);
for(i=1;i<=n;i++)if(p-i>=1&&p-i<=n&&vi[i][p-i]&&s[i][p-i]==mi)
vi[i+1][p-i]=vi[i][p-i+1]=1;
}
}
Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) D. Minimum path(字典序)的更多相关文章
- Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2)
Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) #include <bits/stdc++ ...
- Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2) D. Minimum path
http://codeforces.com/contest/1072/problem/D bfs 走1步的最佳状态 -> 走2步的最佳状态 -> …… #include <bits/ ...
- Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2)D(思维,DP,字符串)
#include<bits/stdc++.h>using namespace std;char c[2007][2007];char ans[4007];int s[2007][2007] ...
- (AB)Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round
A. Right-Left Cipher time limit per test 1 second memory limit per test 256 megabytes input standard ...
- Codeforces Round #528 (Div. 2, based on Technocup 2019 Elimination Round 4) C. Connect Three 【模拟】
传送门:http://codeforces.com/contest/1087/problem/C C. Connect Three time limit per test 1 second memor ...
- Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) C. Vasya and Golden Ticket 【。。。】
任意门:http://codeforces.com/contest/1058/problem/C C. Vasya and Golden Ticket time limit per test 1 se ...
- Codeforces Round #512 (Div. 2, based on Technocup 2019 Elimination Round 1) E. Vasya and Good Sequences(DP)
题目链接:http://codeforces.com/contest/1058/problem/E 题意:给出 n 个数,对于一个选定的区间,区间内的数可以通过重新排列二进制数的位置得到一个新的数,问 ...
- Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3)B. Personalized Cup
题意:把一长串字符串 排成矩形形式 使得行最小 同时每行不能相差大于等于两个字符 每行也不能大于20个字符 思路: 因为使得行最小 直接行从小到大枚举即可 每行不能相差大于等于两个字符相当于 ...
- Codeforces Round #522 (Div. 2, based on Technocup 2019 Elimination Round 3) C. Playing Piano
题意:给出一个数列 a1 a2......an 让你构造一个序列(该序列取值(1-5)) 如果a(i+1)>a(i) b(i+1)>b(i) 如果a(i+1)<a(i) 那么b( ...
随机推荐
- swift 关于didSet 和willSet赋值的注意点
1. 初始化赋值的时候都不会走这个的方法, 需要在创建结构体后或对象后,在赋值,此时才会走这个方法
- linq to sql语句中转换数据类型和日期操作
System.Data.Entity.SqlServer.SqlFunctions.StringConvert System.Data.Entity.DbFunctions
- Windows 获取unix timestamp
#include <stdio.h> #include <time.h> int main(){ SYSTEMTIME lpSysTime; GetLocalTime(& ...
- 小程序41028 form_id无效
如果参数都没有问题的话,那么我的问题来了,你是发给用户自己么?如果不是,那就找到原因了,必须发给本人才可以...我淌过无数条坑,这个坑我服了...官方文档上写的不是很清楚
- Ubuntu安装UFW防火墙
sudo apt-get install ufw 一般用户,只需如下设置:sudo apt-get install ufw sudo ufw enable sudo ufw default deny ...
- 关于transform-style:preserve-3d的些许明了
父元素要添加属性transform-style:preserve-3d;和transform:perspective(800px);还有相对定位 首先设置子元素 具有3D属性,然后再设置视角与3D元素 ...
- XiaoKL学Python(C)__future__
__future__ in Python 1. from __future__ import xxxx 这是为了在低版本的python中使用可能在某个高版本python中成为语言标准的特性,从而 在将 ...
- 2019年Java未来的发展方向
2018即将结束,迎来2019年,Java作为世界上 最流行的计算机编程语言,在当今信息时代中发挥了重要的作用.Java语言本身具有着自己独特的优势:面向对象.分布式应用并且安全.多线程.跨平台等.这 ...
- Cannot switch on a value of type String for source level below 1.7. Only convertible int values or enum variables are permitted
在java中写switch代码时,参数用的是string,jdk用的是1.8,但是还是报错,说不支持1.7版本以下的,然后查找了项目中的一些文件,打开一个文件如下,发现是1.6的版本,好奇怪啊,按照e ...
- 使用limma、Glimma和edgeR,RNA-seq数据分析易如反掌
使用limma.Glimma和edgeR,RNA-seq数据分析易如反掌 Charity Law1, Monther Alhamdoosh2, Shian Su3, Xueyi Dong3, Luyi ...