1043 方格取数 2000年NOIP全国联赛提高组
1043 方格取数
2000年NOIP全国联赛提高组
设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。如下图所示(见样例):
某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。
此人从A点到B 点共走两次,试找出2条这样的路径,使得取得的数之和为最大。

输入的第一行为一个整数N(表示N*N的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的0表示输入结束。
只需输出一个整数,表示2条路径上取得的最大的和。
8
2 3 13
2 6 6
3 5 7
4 4 14
5 2 21
5 6 4
6 3 15
7 2 14
0 0 0
67
分类标签 Tags 点此展开‘
注意ed的定义
AC:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=;
int map[MAXN][MAXN];
int vis[MAXN][MAXN];
int pass[MAXN][MAXN];
int ans1=;
int n;
int ed;
void dfs(int i,int j,int tot,int now)
{
int t=map[i][j];
map[i][j]=;
if(i==n&&j==n)
{
if(now==)
{
dfs(,,tot+ed,);
}
else
{
if(tot>ans1)
ans1=tot;
return ;
}
}
vis[i][j]=;
if(vis[i+][j]==&&i+<=n&&j<=n&&i>&&j>)
{
dfs(i+,j,tot+t,now);
}
if(vis[i][j+]==&&i<=n&&j+<=n&&i>&&j+>)
{
dfs(i,j+,tot+t,now);
}
vis[i][j]=;
map[i][j]=t;
}
int main()
{ scanf("%d",&n);
int x,y,z;
while(scanf("%d%d%d",&x,&y,&z))
{
if(x==&&y==&&z==)
break;
else
map[x][y]=z;
}
ed=map[n][n];
dfs(,,,);
printf("%d",ans1);
//dfs2(1,1,0);
return ;
}
未AC:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=;
int map[MAXN][MAXN];
int vis[MAXN][MAXN];
int pass[MAXN][MAXN];
int ans1=;
int ans2=;
int n;
int now=;
void dfs(int i,int j,int tot)
{
if(i==n&&j==n)
{
if(tot>ans1)
{
memset(pass,,sizeof(pass));
ans1=tot;
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(vis[i][j]==)
pass[i][j]=;
}
}
}
return ;
}
if(vis[i+][j]==&&i+<=n&&j<=n&&i>&&j>)
{
vis[i+][j]=;
dfs(i+,j,tot+map[i+][j]);
vis[i+][j]=;
}
if(vis[i][j+]==&&i<=n&&j+<=n&&i>&&j+>)
{
vis[i][j+]=;
dfs(i,j+,tot+map[i][j+]);
vis[i][j+]=;
}
}
int main()
{ scanf("%d",&n);
int x,y,z;
while(scanf("%d%d%d",&x,&y,&z))
{
if(x==&&y==&&z==)
break;
else
map[x][y]=z;
}
dfs(,,map[][]);
int tot=ans1;
ans1=;
//printf("%d\n",tot);
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
if(pass[i][j]==)
map[i][j]=;
}
}
dfs(,,);
tot=tot+ans1;
printf("%d",tot);
//dfs2(1,1,0);
return ;
}
1043 方格取数 2000年NOIP全国联赛提高组的更多相关文章
- codevs 1043 方格取数 2000年NOIP全国联赛提高组
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而 ...
- 1043 方格取数 2000 noip 提高组
1043 方格取数 2000 noip 提高组 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样 ...
- 矩阵取数游戏 2007年NOIP全国联赛提高组(dp+高精)
矩阵取数游戏 2007年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description [问题描述]帅帅经常跟 ...
- Codevs 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组
1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 今年是国 ...
- 1009 产生数 2002年NOIP全国联赛普及组
1009 产生数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 给出一个整数 n(n< ...
- 1008 选数 2002年NOIP全国联赛普及组
1008 选数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description ...
- 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组
1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组 #include <iostream> #include <string> #include & ...
- Codevs 1064 虫食算 2004年NOIP全国联赛提高组
1064 虫食算 2004年NOIP全国联赛提高组 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 所谓虫食算,就是原先的算式 ...
- Codevs 1198 国王游戏 2012年NOIP全国联赛提高组
1198 国王游戏 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 恰逢 H 国国庆,国王邀 ...
随机推荐
- poj2127——LCIS
题目:http://poj.org/problem?id=2127 LCIS,注意存储路径的方法. 代码如下: #include<iostream> #include<cstdio& ...
- 网络工具 NetCat
http://netcat.sourceforge.net/ windows 版本 https://joncraton.org/blog/46/netcat-for-windows/ https:// ...
- Linux下使用sendEmail发送带附件的邮件(转载)
转载:http://www.ttlsa.com/linux/use-sendemail-send-file/ sendEmail是一个轻量级,命令行的SMTP邮件客户端.如果你需要使用命令行发送邮件, ...
- Razor与HTML混合输出陷阱与技巧
3,Razor与HTML混合输出陷阱与技巧 属性名称误判 有时候我们必须让html内容与razor语句紧接在一起, eg: 您好,a先生 假设变量名称为ViewBag.Name, 您好, ...
- 火狐浏览器httprequest插件添加和使用方法(适用于前后台分离,测试后台接口)
第一步:打开火狐浏览器工具栏找到添加组件 1.如图1点击添加组件 第二步:添加组件Httprequest 1.如图2,检索Httprequest 2.如图3,将组件添加到火狐浏览器中 3.如图3.5, ...
- Linux下查看磁盘剩余空间和文件夹大小
1. du -sh 查看当前文件夹大小 2. du -sh * | sort -n 列出当前文件夹下的所有文件夹及其大小,并按照文件夹大小排序 du - sh * //查看当前文件夹下所有文件的大小 ...
- 洛谷P1549 棋盘问题(2)
P1549 棋盘问题(2) 题目描述 在N*N的棋盘上(1≤N≤10),填入1,2,…,N*N共N*N个数,使得任意两个相邻的数之和为素数. 例如:当N=2时,有: 其相邻数的和为素数的有: 1+2, ...
- [Xcode 实际操作]七、文件与数据-(5 )复制、移动、删除文件和删除文件夹
目录:[Swift]Xcode实际操作 本文将演示如何复制.移动和删除文件. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class ...
- 剑指Offer的学习笔记(C#篇)-- 求1+2+3+...+n
题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.case等关键字及条件判断语句(A?B:C). 一 . 直接解题吧 芽儿呦,突然觉得,我不说! ...
- 原生JS和jQuery中基本的节点操作
js中节点操作**document.createElement()**用来生成网页元素节点,参数为元素的标签名: **document.createTextNode()**用来生成文本节点,参数为所要 ...