小搜索思想

链接:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1147


这道题主要要考虑到,首先找出每一个可能遍历的点,即在每个遍历的点的右或下,再选局部最优, 一直从开始的点到矩阵右下方最后的一个点,循环此过程;


代码如下:


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<math.h>

int a[1010][1010];

int min(int x,int y){
   if(x < y) return x;
   else return y;
}

int main() {
  int i, j, n;

  while(scanf("%d", &n) !=EOF ) {

     for(i=1; i<=n; i++) {
        for(j=1; j<=n; j++) {
            scanf("%d", &a[i][j]);
        }
     }
     for(i=1; i<=n; i++) {
        for(j=1; j<=n; j++) {
            if((i-1)<=0&&(j-1)>0) {
                a[i][j] += a[i][j-1];
            }else if((i-1)>0&&(j-1)>0) {
                a[i][j] += min(a[i-1][j], a[i][j-1]);
            }else if((i-1)>0&&(j-1)<=0) {
                a[i][j] += a[i-1][j];
            }
        }
     }
     printf("%d\n", a[n][n]);
   }
    return 0;
}
其他解法,待续。。。

你可能感兴趣的:(优化,遍历,搜索)