第四届河南省程序设计竞赛 迷宫问题

原创 2012年03月30日 21:05:44

额,刚开始有指导说用动态规划,而我也觉得dp 是可解的,但是后来提交时WA,用了一组测试数据发现存在漏洞 。例如: 3  1 0 0  1 0 0 1 0 0

后来又有人说用搜索,可是自己却感觉搜素不可行的,不过结果是可想而知的。。。。。。

题目链接

 

#include<stdio.h> 
#include<string.h> 
#define SIZE_N 101 
#define INF_MAX 0x7fffffff 
int Map[SIZE_N][SIZE_N],vis[SIZE_N][SIZE_N]; 
int n,H,L,flag; 
int dir[4][2]={1,0,-1,0,0,1,0,-1}; 
void DFS(int x,int y) 
{
 int i,xx,yy;   
 if(flag)return ;
 vis[x][y]=1;  
 if(Map[x][y]<L||Map[x][y]>H)   
  return ;  
 if(x==n&&y==n){   
  flag=1;      
  return;   
 }   
 for(i=0;i<4;i++){   
  xx=x+dir[i][0];   
  yy=y+dir[i][1];   
  if(xx>=1&&xx<=n&&yy>=1&&yy<=n&&!vis[xx][yy]){    
   DFS(xx,yy);    
  }   
 } 
} 
int main() 
{  
 int i,j; 
 int max,min;  
 int hight,mid,low;  
 while(scanf("%d",&n)!=EOF){   
  min=INF_MAX,max=-1;   
  for(i=1;i<=n;i++){   
   for(j=1;j<=n;j++){              
    scanf("%d",&Map[i][j]);     
    if(Map[i][j]<min)min=Map[i][j];     
    if(Map[i][j]>max)max=Map[i][j];   
   }   
  }  
  hight=max-min;low=0;      
  while(hight>=low){
   mid=(hight+low)/2;
   for(i=min;i<=max-mid;i++){
    H=i+mid;L=i;flag=0;     
    memset(vis,0,sizeof(vis));                
    DFS(1,1);     
    if(flag)break;
   }
   if(i<=max-mid)hight=mid-1;
   else low=mid+1;
  }       
  printf("%d\n",hight+1);   
 }  
 return 0; 
}


下面是我写的dp 版

#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstring>
#define MAX 1000
#define MIN 0
#define max(x,y) x>y?x:y
#define min(x,y) x<y?x:y

using namespace std;

int a[102][102];   
int mi[102][102], ma[102][102];

int dp(int n)
{
    int i, j, k;
    for(i=1; i<=n; i++)
    for(j=1; j<=n; j++)
    cin>>a[i][j];
   
     for(j=1; j<n; j++)
     {
     mi[0][j] = min(a[1][j],a[1][j+1]);
     ma[0][j] = max(a[1][j],a[1][j+1]);
     }
    for(i=1; i<n; i++)
    {
    mi[i][0] = min(a[i][1],a[i+1][1]);
    ma[i][0] = max(a[i][1],a[i+1][1]);
    }
    
    ma[1][2] = mi[1][2]= ma[2][1] = mi[2][1] = a[1][1];
    for(i=2; i<=n; i++)
    for(j=2; j<=n; j++)
    {
      if( (max(ma[i-1][j],a[i][j])- min(mi[i-1][j],a[i][j]) ) < (max(ma[i][j-1],a[i][j])- min(mi[i][j-1],a[i][j])) )
       {
       mi[i][j]= min(mi[i-1][j],a[i][j]);
       ma[i][j]= max(ma[i-1][j],a[i][j]);
       }
       else
       {
        mi[i][j]= min(mi[i][j-1],a[i][j]);
        ma[i][j]= max(ma[i][j-1],a[i][j]);
       }
    }
 return ma[n][n] - mi[n][n];
}
int main()
{
    int n;
    int i,j;
    while(scanf("%d",&n)!=EOF)
    {
    int k = dp(n);
    printf("%d\n",k);
    }
   system("pause");
   return 0;
}


 

2016河南省第九届ACM程序设计竞赛【正式赛真题】

A题:表达式求值 时间限制:1000 ms  |  内存限制:65535 KB 描述 假设表达式定义为:1. 一个十进制的正整数 X 是一个表达式。2. 如果 X 和 Y 是 表达式,则 X+Y...
  • liu940204
  • liu940204
  • 2016年07月19日 11:09
  • 6355

2016年湖南省第十二届大学生计算机程序设计竞赛 解题报告

2016年湖南省第十二届大学生计算机程序设计竞赛 解题报告 csu Problem A: 2016 Problem B:有向无环图 Problem C:Three Capitals Problem D...
  • no_name233
  • no_name233
  • 2016年09月07日 19:44
  • 1422

湖南省第六届大学生计算机程序设计竞赛---弟弟的作业

1007: 弟弟的作业 时间限制: 1 Sec  内存限制: 128 MB 提交: 3  解决: 3 [提交][状态][讨论版] 题目描述 你的弟弟刚做完了“100以内数的加减法...
  • u014253173
  • u014253173
  • 2014年07月07日 11:29
  • 2240

NYoj303 第四届河南省程序设计竞赛

这道题是昨天晚上看的,当时感觉挺难得,后来想了想,发现就是个进制得问题,有了基本思路。今天早上又稍微想了一下,思路已经非常清晰了。下课之后,开始写代码,之后就是个悲剧,,,一直有问题,好不容易把所有情...
  • wmn_wmn
  • wmn_wmn
  • 2011年08月31日 13:30
  • 1412

河南省第四届ACM程序设计大赛 问题 G: BOBSLEDDING

问题 G: BOBSLEDDING 时间限制: 1 Sec  内存限制: 128 MB 提交: 85  解决: 23 [提交][状态] 题目描述 Dr.Kong has entered ...
  • qq_33406883
  • qq_33406883
  • 2016年05月30日 18:03
  • 191

问题 A: 序号互换 河南省第四届ACM程序设计大赛

问题 A: 序号互换 时间限制: 1 Sec  内存限制: 128 MB 提交: 37  解决: 27 [提交][状态] 题目描述 Dr.Kong设计了一个聪明的机器人卡多,卡多会对电子...
  • qq_33406883
  • qq_33406883
  • 2016年05月30日 17:45
  • 203

河南省第九届ACM程序设计竞赛。问题 F: Decimal integer conversion

题意:有一个n,他有一个n的错一位的二进制数字,还有一个n的错一位的三进制数字。求n是多少? 思路:暴力枚举出所有情况。...
  • xiangAccepted
  • xiangAccepted
  • 2017年04月18日 16:51
  • 145

2016河南省第九届ACM程序设计竞赛,问题 E: 机器设备

题目链接:http://acm.codedream.ren/JudgeOnline/ 问题 E: 机器设备 时间限制: 1 Sec  内存限制: 64 MB 提交: 11  解决: 5 [...
  • xiangAccepted
  • xiangAccepted
  • 2017年04月17日 19:07
  • 449

2014年第四届“华为杯”南邮程序设计竞赛,选拔赛第二题 亲友团问题

题目B:亲友团问题 时间限制(普通/Java):6000MS/18000MS          运行内存限制:65536KByte 问题描述 在2014“华为杯”南邮大学生团体歌唱大赛每一个轮比...
  • u014691362
  • u014691362
  • 2014年05月10日 18:44
  • 667

河南省第四届ACM程序设计大赛原题

  • 2011年11月27日 22:22
  • 65KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第四届河南省程序设计竞赛 迷宫问题
举报原因:
原因补充:

(最多只允许输入30个字)