codefoces 1072 D Minimum path dp+bfs (zls一眼题

该博客介绍了如何解决Codeforces 1072D问题,通过动态规划(DP)和广度优先搜索(BFS)策略,寻找从(1,1)到(n,n)的最短路径,允许替换矩阵中的k个元素。作者提到,可以预处理DP来找到所有能全替换为'a'的路径,并用BFS寻找最小路径。若k+dp[i][j]>=n+n-1,则输出路径全为'a',当k=0时需特殊处理。" 114942134,10536753,Java LocalDateTime withNano()详解及示例,"['Java时间日期处理', 'LocalDateTime', '时间精度']
摘要由CSDN通过智能技术生成

CF 1072 D

题意 给你一个n*n的矩阵然后给你k代表能替换k次 然后从 (1,1)走向(n,n)

蒟蒻不会 一旁的zls看了一眼觉得我们要dp 但是dp不能记录答案路径 于是我们觉得预处理dp 处理出来前面能全替换成a的点 也就是坐标 i+j-1-k ==dp[i][j] 也就是说这条路径a的数目加上k等于路径的字符串长度 我们从能走的坐标标记出来 然后进行bfs bfs是zls的层层bfs 也就是你bfs一层记录最小的ch 然后找最小的ch去bfs 记录答案 注意如果k+dp[i][j]>=n+n-1代表路上都可以换成a 那么你就输出2n - 1 个a 但是k = 0 要特判 直接1 1bfs

#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <map>
#include <set>
#include <vector>
using namespace std;
const int MAX_N = 2024;
char str[MAX_N][MAX_N];
char ans[MAX_N];
int dp[MAX_N][MAX_N],vis[MAX_N][MAX_N];
int n,tot;
int dir[2][2] = {1,0,0,1};
set<string > st;
vector<pair<int ,int > > vt;
queue<pair<int,int> >q;
void bfs(){
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值