标签:names memset get nbsp 初始 font space scanf getchar
#include<bits/stdc++.h>
using namespace std;
char c[2007][2007];
char ans[4007];
int s[2007][2007];
int main(){
memset(s,-1,sizeof(s));
int n,k;
scanf("%d%d",&n,&k);
getchar();
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%c",&c[i][j]);
}
getchar();
}
s[1][1]=k;//初始可改变的次数
char mn=0;
char tmp=0;
for(int i=1;i<=n*2-1;i++){
mn=‘z‘;
for(int j=1;j<=i;j++){
if(j>n||i-j+1>n)
continue;
if(s[j][i-j+1]>-1){//可达位置
tmp=c[j][i-j+1];
if(tmp!=‘a‘&&s[j][i-j+1]>0)//改变机会未用完
tmp=‘a‘;
mn=min(mn,tmp);
}
}
ans[i]=mn;//i可走到的位置的最小值
for(int j=1;j<=i;j++){
if(j>n||i-j+1>n)
continue;
if(s[j][i-j+1]>-1){
tmp=c[j][i-j+1];
if(tmp!=‘a‘&&s[j][i-j+1]>0){//贪心,前面有机会能变a就变
tmp=‘a‘;
s[j][i-j+1]--;
}
if(tmp==mn){//可行出路之一
if(j<n)
s[j+1][i-j+1]=max(s[j+1][i-j+1],s[j][i-j+1]);//走改变少的路
if(i-j+1<n)
s[j][i-j+2]=max(s[j][i-j+2],s[j][i-j+1]);//走改变少的路
}
}
}
printf("%c",ans[i]);
}
return 0;
}
Codeforces Round #517 (Div. 2, based on Technocup 2019 Elimination Round 2)D(思维,DP,字符串)
标签:names memset get nbsp 初始 font space scanf getchar
原文地址:https://www.cnblogs.com/ldudxy/p/10030014.html