首页 > 其他分享 >洛谷 P1006 [NOIP2008 提高组] 传纸条

洛谷 P1006 [NOIP2008 提高组] 传纸条

时间:2024-04-05 10:11:40浏览次数:28  
标签:洛谷 cur P1006 NOIP2008 grid && x2 x1 dp

题意:传纸条,跟方格取数一样,但是两条路径不能有重复的。

思路:还是一样的走,但是x1跟x2不能相等,包括现在跟上一个状态。

总结:看了题解,发现题解大多数都是逻辑不正确的,更有离谱的是数组范围都不加特判,数组访问越界但是可以ac的情况,数据太烂了,放个自以为正确的思路吧,发现之前自己提交的满分代码也不是逻辑完全正确,放个自以为正确的代码。

void solve(){
	int n, m;
	cin >> n >> m;

	vector<vector<int>> grid(n + 1, vector<int> (m + 1, 0));
	for (int i = 1; i <= n; ++i){
		for (int j = 1; j <= m; ++j){
			cin >> grid[i][j];
		}
	}

	vector<vector<vector<int>>> dp(2, vector<vector<int>> (n + 1, vector<int>(m + 1, 0)));
	dp[0][1][1] = grid[1][1];

	vector<vector<int>> zeros(n + 1, vector<int>(m + 1, 0));
	int cur = 0;
	for (int s = 1; s <= n + m - 2; ++s){
		cur ^= 1;
		for (int x1 = 1; x1 <= min(s + 1, n); ++x1){
			for (int x2 = 1; x2 <= min(s + 1, n); ++x2){
				if (x1 == x2 && (s != n + m - 2)){
					continue;
				}
				int y1 = s + 2 - x1;
				int y2 = s + 2 - x2;
				if (max(y1, y2) > m){
					continue;
				}
				if (x1 > 1 && x2 > 1){
					dp[cur][x1][x2] = max(dp[cur][x1][x2], dp[!cur][x1 - 1][x2 - 1] + grid[x1][y1] + grid[x2][y2]);
				}
				if (x1 > 1 && y2 > 1 && (x1 - 1 != x2 || (x1 == 2 && s == 1) || s == n + m - 2)){
					dp[cur][x1][x2] = max(dp[cur][x1][x2], dp[!cur][x1 - 1][x2] + grid[x1][y1] + grid[x2][y2]);
				}
				if (y1 > 1 && x2 > 1 && (x2 - 1 != x1 || (x2 == 2 && s == 1) || s == n + m - 2)){
					dp[cur][x1][x2] = max(dp[cur][x1][x2], dp[!cur][x1][x2 - 1] + grid[x1][y1] + grid[x2][y2]);
				}
				if (y1 > 1 && y2 > 1){
					dp[cur][x1][x2] = max(dp[cur][x1][x2], dp[!cur][x1][x2] + grid[x1][y1] + grid[x2][y2]);
				}
			}
		}
	}
  //  for (int i = 1; i <= n; ++i){
	  //  for (int j = 1; j <= m; ++j){
	  //      cout <<dp[cur][i][j] << " \n"[j == m];
	   // }
	//}

	cout << dp[cur][n][m]  << '\n';
}

标签:洛谷,cur,P1006,NOIP2008,grid,&&,x2,x1,dp
From: https://www.cnblogs.com/yxcblogs/p/18115514

相关文章

  • 洛谷p1002题解
    [NOIP2002普及组]过河卒题目描述棋盘上AAA点有一个过河卒,需要走到目标BB......
  • 洛谷p1002(过河卒)
    题目描述 如图,A点有一个过河卒,需要走到目标B点。卒行走规则:可以向下、或者向右。同时在棋盘上的任一点有一个对方的马(如上图的C点),该马所在的点和所有跳跃一步可达的点称为对方马的控制点。例如下图C点上的马可以控制9个点(图中的P1,P2…P8和C)。卒不能通过对方马的控......
  • 洛谷 P1004 [NOIP2000 提高组] 方格取数
    题意:n*n的方格,从左上角到右下角两次。每一次经过的路径中,如果有数字,数字都会变成0并计数。求两次路径的最大计数。思路:线性dp,从左上角到右下角步数固定为2*n-2步。初始时0步dp[0][1][1]=grid[1][1],知道了x1和x2可以确定对应的y,可以直接进行状态转移。可以增加剪枝:x<=m......
  • 洛谷 P1196 [NOI2002] 银河英雄传说
    题意:30000列军队,每列初始有1个。编号从1~30000.每次操作有两种,将现在第i列所在的列合并到第j列所在列的末尾。或者查询第i列举例第j列的距离。思路:带权并查集。合并时将第i列头节点接到第j列头节点上。然后直接查询dist取绝对值相减就好。总结:一开始没看清题,以为要把从i列从当......
  • 洛谷:P8671 [蓝桥杯 2018 国 AC] 约瑟夫环
    时间限制1.00s     内存限制256.00MB     难易度:普及+/提高【题目描述】n 个人的编号是1∼n,如果他们依编号按顺时针排成一个圆圈,从编号是 1 的人开始顺时针报数。(报数是从 1 报起)当报到 k 的时候,这个人就退出游戏圈。下一个人重新从 1 开始报......
  • 每日一题 第六十六期 洛谷 小朋友排队
    [蓝桥杯2014省B]小朋友排队题目描述nnn个小朋友站成一排。现在要把他们按身高从低到高的顺序排列,但是每次只能交换位置相邻的两个小朋友。每个小朋友都有一个不高......
  • 洛谷题单指南-图的基本应用-P1347 排序
    原题链接:https://www.luogu.com.cn/problem/P1347题意解读:在给出多对关系字母的比较关系之后,判断能否确定所有字母的顺序。解题思路:对字母的关系建立图,如A<B建立A指向B的一条边。如果在拓扑排序过程中,每次寻找入度为0的点只有一个,且最终可以形成拓扑序,则可以确定所有字母的顺......
  • 【洛谷 P8695】[蓝桥杯 2019 国 AC] 轨道炮 题解(映射+模拟+暴力枚举+桶排序)
    [蓝桥杯2019国AC]轨道炮题目描述小明在玩一款战争游戏。地图上一共有NNN个敌方单位,可以看作2D平面上的点。其中第i......
  • 【洛谷 P8672】[蓝桥杯 2018 国 C] 交换次数 题解(字符串+映射+全排列)
    [蓝桥杯2018国C]交换次数题目描述IT产业人才需求节节攀升。业内巨头百度、阿里巴巴、腾讯(简称BAT)在某海滩进行招聘活动。招聘部门一字排开。由于是自由抢占席位,三大公司的席位随机交错在一起,形如:ABABTATT,这使得应聘者十分别扭。于是,管理部门要求招聘方进行必要的......
  • 【洛谷 P8700】[蓝桥杯 2019 国 B] 解谜游戏 题解(字符串+映射+周期性)
    [蓝桥杯2019国B]解谜游戏题目背景题目描述小明正在玩一款解谜游戏。谜题由242424根塑料棒组成,其中黄色塑料棒4......