牛客竞赛每日俩题 - Day5
创始人
2024-01-16 04:42:04

DP+贪心

年终奖_牛客题霸_牛客网

 

思路:

定义f(i,j)表示从左上角走到坐标(i,j)处能获得的最大奖励。 搜索所有从左上角走到右下角的路径,找到最优路径。 f(i,j)分三种情况: 第一列:f(i, 0) = f(i-1, 0) + board(i, 0) 如果处在第一列,那么由于是第一列,所以从起点走,它只可能是向下不断走的到的 第一行:f(0,j) = f(0, j - 1) + b(0, j) 如果处在第一行,那么由于是第一行,所以从起点走,它只可能是向右不断走得到的 其它位置:f(i, j) = max{f(i-1, j), f(i, j - 1)} + board(i, j) 最后返回右下角的值

 

class Bonus {
public:int getMost(vector > board) {int x=board.size();int y=board[0].size();//vector> tot(x,vector(y,0));int tot[6][6]={0};tot[0][0]=board[0][0];for(int i=0;i

dfs迷宫问题(最短路径)

迷宫问题_牛客题霸_牛客网

 思路:

本题可用回溯法求解 具体步骤为: 1. 首先将当前点加入路径,并设置为已走 2. 判断当前点是否为出口,是则输出路径,保存结果;跳转到4 3. 依次判断当前点的上、下、左、右四个点是否可走,如果可走则递归走该点 4. 当前点推出路径,设置为可走
#include
#include
using namespace std;
int ROW, COL;
vector> maze;
vector> path_tmp; //临时路劲
vector> path_best; //最佳路劲
void MazeTrack(int i, int j) {maze[i][j] = 1; //代表(i,j)已经走过path_tmp.push_back({i, j});
//判断是否到达出口if (i == ROW - 1 && j == COL - 1) {
//寻找最短路劲if (path_best.empty() || path_best.size() > path_tmp.size())path_best = path_tmp;}
//向右走if (j + 1 < COL && maze[i][j + 1] == 0)MazeTrack(i, j + 1);
//向左走if (j - 1 >= 0 && maze[i][j - 1] == 0)MazeTrack(i, j - 1);
//向上走if (i - 1 >= 0 && maze[i - 1][j] == 0)MazeTrack(i - 1, j);
//向下走if (i + 1 < ROW && maze[i + 1][j] == 0)MazeTrack(i + 1, j);maze[i][j] = 0; //走不通,回溯 恢复路径path_tmp.pop_back();
}
int main() {cin >> ROW >> COL;maze = vector>(ROW, vector(COL, 0)); //开辟迷宫空间//首先输入迷宫for (int i = 0; i < ROW; ++i) {for (int j = 0; j < COL; ++j)cin >> maze[i][j];}MazeTrack(0, 0); //从起始点(0,0)开始走
//输出路径for (int i = 0; i < path_best.size(); ++i) {cout << "(" << path_best[i][0] << "," << path_best[i][1] << ")" << endl;}return 0;
}

用pair对组优化

#include
using namespace std;int dirs[4][2] = {-1, 0, 1, 0, 0, -1, 0, 1};
int n, m, grid[10][10];
vector> bestPath, path;void dfs(int x, int y) {grid[x][y] = 1;path.emplace_back(x, y);if (x == n - 1 && y == m - 1)   // 到达终点if (bestPath.empty() || path.size() < bestPath.size()) {bestPath = path;return;}for (auto &[dx, dy] : dirs) {int nx = x + dx, ny = y + dy;if (nx < 0 || nx >= n || ny < 0 || ny >= m || grid[nx][ny]) continue;dfs(nx, ny);}path.pop_back();    // 还原状态grid[x][y] = 0;
}int main() {cin >> n >> m;for (int i = 0; i < n; ++i)for (int j = 0; j < m; ++j)cin >> grid[i][j];dfs(0, 0);for (auto &[x, y] : bestPath) {printf("(%d,%d)\n", x, y);}return 0;
}

 

上一篇:两个简短的章节

下一篇:荒野的消失

相关内容

热门资讯

苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...