zoukankan      html  css  js  c++  java
  • 3251:最少费用

    题目链接:百炼题库 http://bailian.openjudge.cn/practice/3251
    总时间限制: 1000ms 内存限制: 65536kB
    描述
    一个商人穿过一个正方形的网格,每经过网格上的一个点需要缴纳一定的费用。每行和每列上的点费用都是按照从小到大顺序排列的,并且对于每个网格上的点,其前后左右的各个点的收费都是不一样的。
    编写程序设计一个商人总左上角走到右下角花费的最小费用。
    输入
    第一行是一个整数,表示正方行的宽度N (N <100),
    后面n行n列为网格上每个点的费用
    输出
    一行,表示最小费用
    样例输入
    5
    1  4  6  8  10 
    2  5  7  15 17 
    6  8  9  18 20 
    10 11 12 19 21 
    20 23 25 29 33 
    样例输出
    109
    提示
    可以用递归方法,或者动态规划方法
    来源
    cs10107 C++ Final Exam

    分析:

    假设a[i][j]表示从左上角走到a[i][j]的最小代价。那么有如下的递推式:

    a[i][j]=min(  a[i][j-1],  a[i-1][j]  )+a[i][j],其中i,j大于0.

    当i==j==0时,a[i][j]就是题目输入的a[0][0].

    当i==0&&j!=0时,a[i][j]=a[i][j-1]+a[i][j]

    当i!=0&&j==0时,a[i][j]=a[i-1][j]+a[i][j].

    所以代码如下:

     1 #include<string.h>
     2 #include<stdio.h>
     3 
     4 int n;
     5 int matrix[100][100];
     6 int value[100][100];
     7  
     8 int main()
     9 {
    10     scanf("%d", &n);
    11     for (int i = 0; i < n; i++)
    12     {
    13         for (int j = 0; j < n; j++)
    14         {
    15             int temp;
    16             scanf("%d", &temp);
    17             matrix[i][j] = temp;
    18         }
    19     }
    20  
    21     for (int i = 0; i < n; i++)
    22     {
    23         for (int j = 0; j < n; j++)
    24         {
    25             if ((i == 0) && (j == 0))
    26             {
    27                 value[i][j] = matrix[i][j];
    28             }
    29             else if ((i == 0) && (j != 0))
    30             {
    31                 value[i][j] = matrix[i][j] + value[i][j - 1];
    32             }
    33             else if ((i != 0) && (j == 0))
    34             {
    35                 value[i][j] = matrix[i][j] + value[i - 1][j];
    36             }
    37             else
    38             {
    39                 int a = matrix[i][j] + value[i - 1][j];
    40                 int b = matrix[i][j] + value[i][j - 1];
    41                 value[i][j] = (a > b) ? b : a;
    42             }
    43  
    44         }
    45     } 
    46     printf("%d", value[n - 1][n - 1]); 
    47     return 0; 
    48 }
  • 相关阅读:
    Pandas对于CSV的简单操作
    前端之BOM和DOM
    前端之JavaScript
    前端之CSS初识
    定时ping取返回值并绘图
    etree不存在解决方法
    内置方法练习(一)
    pip使用
    python变量、变量属性
    python 爬取段子网段子写入文件
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/10464200.html
Copyright © 2011-2022 走看看