1043 方格取数

2000年NOIP全国联赛提高组

时间限制: 1 s
空间限制: 128000 KB
题目等级 : 钻石 Diamond
 
 
 
 
题目描述 Description

设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0。如下图所示(见样例):

某人从图的左上角的A 点出发,可以向下行走,也可以向右走,直到到达右下角的B点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。

此人从A点到B 点共走两次,试找出2条这样的路径,使得取得的数之和为最大。

输入描述 Input Description

输入的第一行为一个整数N(表示N*N的方格图),接下来的每行有三个整数,前两个表示位置,第三个数为该位置上所放的数。一行单独的0表示输入结束。

输出描述 Output Description

只需输出一个整数,表示2条路径上取得的最大的和。

样例输入 Sample Input

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

样例输出 Sample Output

67

数据范围及提示 Data Size & Hint
如描述

分类标签 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全国联赛提高组的更多相关文章

  1. codevs 1043 方格取数 2000年NOIP全国联赛提高组

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而 ...

  2. 1043 方格取数 2000 noip 提高组

    1043 方格取数  2000 noip 提高组 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样 ...

  3. 矩阵取数游戏 2007年NOIP全国联赛提高组(dp+高精)

    矩阵取数游戏 2007年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold     题目描述 Description [问题描述]帅帅经常跟 ...

  4. Codevs 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组

    1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 今年是国 ...

  5. 1009 产生数 2002年NOIP全国联赛普及组

    1009 产生数 2002年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold   题目描述 Description 给出一个整数 n(n< ...

  6. 1008 选数 2002年NOIP全国联赛普及组

    1008 选数 2002年NOIP全国联赛普及组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解  查看运行结果     题目描述 Description ...

  7. 1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组

    1017 乘积最大 2000年NOIP全国联赛普及组NOIP全国联赛提高组   #include <iostream> #include <string> #include & ...

  8. Codevs 1064 虫食算 2004年NOIP全国联赛提高组

    1064 虫食算 2004年NOIP全国联赛提高组 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 所谓虫食算,就是原先的算式 ...

  9. Codevs 1198 国王游戏 2012年NOIP全国联赛提高组

    1198 国王游戏 2012年NOIP全国联赛提高组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 恰逢 H 国国庆,国王邀 ...

随机推荐

  1. UML统一建模语UML2和EnterpriseArchitect

    其实前面的UML统一建模语言(一)所描述的都是UML1的内容,现在咱们聊一聊UML2. UML2.x完全建立在UML1.x基础之上,大多数的UML1.x模型在UML2.x中都可用.但UML2.x在结构 ...

  2. Windows下Anaconda安装 python + tensorflow

    下载安装Anaconda 首先下载Anaconda,可以从清华大学的镜像网站进行下载. 安装Anaconda,注意安装时不要将添加环境变量的选项取消掉. 安装完成之后,在安装目录下cmd,输入 con ...

  3. 最短路径 一 Dijkstra 模板(O(n^2))

    题目传送:http://hihocoder.com/problemset/problem/1081 #include<iostream> #include<cstdio> #i ...

  4. 自动化测试【Maven+Eclipse+Selenium+Java环境搭建和测试】

    一.下载必要的文件 1.eclipse Eclipse官网 2.jdk jdk官网 3.selenium IDE.Selenium Server.Selenium Client Drivers(Jav ...

  5. 报错:在做往下拉选里面拼接数据的时候 3个下拉选显示一个值 原因 @scope(单例)或者没配默认单例

    解决 @scope(多例)  这是因为造成线程并发访问不安全

  6. 11. 几点基于Web日志的Webshell检测思路

    摘要: Web日志记录了网站被访问的情况,在Web安全的应用中,Web日志常被用来进行攻击事件的回溯和取证.Webshell大多由网页脚本语言编写,常被入侵者用作对网站服务器操作的后门程序,网站被植入 ...

  7. Flutter起步之安装

    官网有介绍的这里就不说,主要有几个步骤: 镜像设置 下载flutter SDK(更新系统环境变量PATH,先不要运行flutter doctor,因为你还没有装android sdk和编辑器) and ...

  8. 51nod1241(连续上升子序列)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1241 题意:中文题诶- 思路:通过观察我们不难发现就是找连续 ...

  9. LibreOJ #2036. 「SHOI2015」自动刷题机

    #2036. 「SHOI2015」自动刷题机 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 题目描述 曾经发明了信号增幅仪的发明家 SHTSC 又公开 ...

  10. Python学习笔记(随机数)

    random模块的作用是产生随机数. import random num = random.randint(1,100) random.randint(a, b)可以生成一个a到b间的随机整数,包括a ...