传送门

唉考试的时候写错了两个细节调了一个多小时根本没调出来。

下来又调了半个小时才过。

其实很简单。

我们先dpdpdp出最开始最多多少个连续的aaa.

然后对于没法继续连续下去的用贪心+bfsbfsbfs来弄就行了。

技不如人,告辞。

代码:

#include<bits/stdc++.h>
using namespace std;
int n,k,mx[2005][2005],maxA;
char mp[2005][2005];
bool vis[2005][2005];
queue<pair<int,int> >q,s;
inline void dfs(int x,int y,int dep){
	if(~mx[x][y])return;
	if(x==1&&y==1)mx[x][y]=(mp[x][y]=='a');
	else{
		if(x^1)dfs(x-1,y,dep-1);
		if(y^1)dfs(x,y-1,dep-1);
		mx[x][y]=(mp[x][y]=='a')+max(mx[x-1][y],mx[x][y-1]);
	}
	if(dep<maxA)return;
	if(mx[x][y]>=dep-k){
		if(dep==maxA)q.push(make_pair(x,y));
		else if(dep>maxA){
			while(!q.empty())q.pop();
			q.push(make_pair(x,y)),maxA=dep;
		}
	}
}
int main(){
	memset(mx,-1,sizeof(mx)),scanf("%d%d",&n,&k);
	for(int i=1;i<=n;++i)scanf("%s",mp[i]+1);
	maxA=k;
	dfs(n,n,n*2-1);
	int sig=26;
	string tmp;
	for(int i=1;i<=min(maxA,n*2-1);++i)tmp=tmp+'a';
	if(maxA>=n*2-1)return cout<<tmp,0;
	if(!maxA)q.push(make_pair(1,1)),tmp=tmp+mp[1][1];
	for(int i=maxA?maxA+1:2;i<=n*2-1;++i){
		sig=26;
		while(!q.empty()){
			pair<int,int>t=q.front();
			q.pop();
			int x=t.first,y=t.second,i,j;
			i=x+1,j=y;
			if(i<=n&&!vis[i][j]){
				vis[i][j]=1;
				if(mp[i][j]-'a'==sig)s.push(make_pair(i,j));
				else if(mp[i][j]-'a'<sig){
					while(!s.empty())s.pop();
					s.push(make_pair(i,j)),sig=mp[i][j]-'a';
				}
			}
			i=x,j=y+1;
			if(j<=n&&!vis[i][j]){
				vis[i][j]=1;
				if(mp[i][j]-'a'==sig)s.push(make_pair(i,j));
				else if(mp[i][j]-'a'<sig){
					while(!s.empty())s.pop();
					s.push(make_pair(i,j)),sig=mp[i][j]-'a';
				}
			}
		}
		tmp=tmp+(char)(sig+'a');
		while(!s.empty())q.push(s.front()),s.pop();
	}
	cout<<tmp;
	return 0;
}

2018.10.21 codeforces1071B. Minimum path(dp+贪心+bfs)的更多相关文章

  1. 2018.10.21 codeforces1071A. Cram Time(贪心构造)

    传送门 直接先看最多能够凑出几个. 然后可以得到一个结论就是如果保证所有页数之和是小于等于A+BA+BA+B的一定都对应着一种合法方案. 如何构造? 我们对于第一天的AAA个小时,从大向小选,如果当前 ...

  2. POI 2018.10.21

    [POI2008]TRO-Triangles https://www.cnblogs.com/GXZlegend/p/7509699.html 平面上有N个点. 求出所有以这N个点为顶点的三角形的面积 ...

  3. 2018.10.19浪在ACM 集训队第一次测试赛

    2018.10.19浪在ACM 集训队第一次测试赛 待参考资料: [1]:https://blog.csdn.net/XLno_name/article/details/78559973?utm_so ...

  4. 【2018.10.20】CXM笔记(思维)

    1. 给你个环状字符串,问从哪个地方拆开能使它的字典序最小. 先预处理任意子串的哈希值. 然后枚举拆点,将它与当前最优的拆点比较谁更优(就是从哪拆的字典序更小),具体方法是二分+哈希找出两串最长的相同 ...

  5. [LeetCode] Unique Paths && Unique Paths II && Minimum Path Sum (动态规划之 Matrix DP )

    Unique Paths https://oj.leetcode.com/problems/unique-paths/ A robot is located at the top-left corne ...

  6. Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum)

    Leetcode之动态规划(DP)专题-64. 最小路径和(Minimum Path Sum) 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. ...

  7. 退役前的记录(2018.10.14-NOIP2018)

    退役前的记录 诸位好,我是\(CJ\)最菜的\(Oier\),已经是\(G2\)的老年选手了,不知道什么时候就会退役了,总之\(G1\ double\)的机会已经没有了,去年因为联赛失利而止步,而今年 ...

  8. 2018.10.20 2018-2019 ICPC,NEERC,Southern Subregional Contest(Online Mirror, ACM-ICPC Rules)

    i207M的“怕不是一个小时就要弃疗的flag”并没有生效,这次居然写到了最后,好评=.= 然而可能是退役前和i207M的最后一场比赛了TAT 不过打得真的好爽啊QAQ 最终结果: 看见那几个罚时没, ...

  9. 刷题64. Minimum Path Sum

    一.题目说明 题目64. Minimum Path Sum,给一个m*n矩阵,每个元素的值非负,计算从左上角到右下角的最小路径和.难度是Medium! 二.我的解答 乍一看,这个是计算最短路径的,迪杰 ...

随机推荐

  1. J2SE 8的Lambda --- 语法

    语法例子 LambdaGrammarTest lambdaTest = new LambdaGrammarTest(); // 1. 能够推导出类型的,可以不写类型 String[] planets ...

  2. shift 参数移位

    更改批处理文件中可替换参数的位置. SHIFT [/n] 如果命令扩展名被启用,SHIFT 命令支持/n 命令行开关:该命令行开关告诉命令从第 n 个参数开始移位:n 介于零和八之间.例如: SHIF ...

  3. as3 有趣现象 关于声明与变量

    当使用了一个变量,并且前后期都没有在有效域内对此声明,不管有没有赋值,都会报错. 但先使用了一个变量,后期在有效域内对此声明,那么此变量不报错,但在声明之前没有赋值,那么赋值默认值:如果使用变量时,赋 ...

  4. Java多线程对同一个对象进行操作

    示例: 三个窗口同时出售20张票. 程序分析: 1.票数要使用一个静态的值. 2.为保证不会出现卖出同一张票,要使用同步锁. 3.设计思路:创建一个站台类Station,继承THread,重写run方 ...

  5. cmake编译参数

    进入源码目录后 cmake . -LH  --查看之前编译参数 ccmake .  使用cmake gui界面进行查看和编辑编译用到的参数 (推荐) 源码目录下 INSTALL-SOURCE 文件后面 ...

  6. 吴裕雄 实战PYTHON编程(5)

    text = '中华'print(type(text))#<class 'str'>text1 = text.encode('gbk')print(type(text1))#<cla ...

  7. lnmp上传文件

    LAMP环境: Linux Mint 16 32bits xfce apache 2.4.6 Ubuntu php 5.5.3 默认www是/var/www,我用符号连接到了/home/tony/ww ...

  8. Linux就业技术指导(四):企业CDN缓存加速原理解密

    1.1 CDN(网站加速) 1.1.1 什么是CDN CDN的全称Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和 ...

  9. dreamwave基础

    WEBcs架构需要在客户段安装程序, 需要安装程序, 工作量会比较大, 需要安装和维护, 比如以后系统升级, 会很麻烦. 优点是一些业务逻辑可以在客户端, 可以减少服务器的一些压力, 客户端的界面操作 ...

  10. luoguP1196(带权并查集)

    题目链接:https://www.luogu.org/problemnew/show/P1196 思路: 带权并查集.对每个结点,构造表示该结点的头结点,该结点距头结点的距离,该列的大小3个数组. 在 ...