试题 算法提高 最大值路径

试题 算法提高 最大值路径

资源限制

时间限制:1.0s   内存限制:256.0MB

问题描述

  刷微博,编程序。如下图所示,@北京发布 提出了如下“头脑震荡”问题。对此问题做一般化描述:
  有n阶方阵,从矩阵的左下角元素为起点,从行或列(水平或垂直)两个方向上移动,直到右上角。求出有多少条路径可以使得经过的元素累加值最大,最大值是多少。

输入格式

  共有n+1行。
  第一行整数n,表示矩阵的阶数,2<=n<=10。
  第二行起,每行n个整数,以空格分隔,共n行。。

输出格式

  一行,两个空格分隔的数,第一个表示最大值路径的条数,第二个表示最大值。

样例输入

5
4 5 4 5 6
2 6 5 4 6
2 6 6 5 2
4 5 2 2 5
5 2 5 6 4

样例输出

3 47

#include<iostream>
using namespace std;
int   dp[19][19],a[19][19];
int   ans =0, ansmax=-1;
void  dfs( int x1 , int y1 ,int x2 ,int y2 ,int sum ){
	  sum+=a[x1][y1];
	  if(  x1  == x2 && y1 == y2 ){
	  	   if( sum > ansmax  ){
	           ansmax = sum ;
			   ans=1;	       	
		   }
		   else if( sum == ansmax ){
		   	    ans++;
		   }
	     return ;
	 }
	  if( x1-1 >=1 )
	      dfs( x1-1 ,y1 ,x2 , y2 ,sum);
	  if( y1+1 <= y2 )
	      dfs( x1 , y1 + 1 , x2 ,y2 ,sum);    
}
int main(void){
	int n;
	scanf("%d",&n);
	for( int i=1;i<=n;i++){
	 	 for( int j=1;j<=n;j++){
	          scanf("%d",&a[i][j]);	 	 
		 }
	} 
    dfs( n , 1 , 1 , n ,0);
    printf("%d %d\n",ans , ansmax);
  	return 0;
} 

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 程序猿惹谁了 设计师:白松林 返回首页