zoukankan      html  css  js  c++  java
  • dp-简单迷宫捡金币

    链接:https://ac.nowcoder.com/acm/challenge/terminal

    吃货LP参加了珠海美食节,每见一家摊位都会大吃一顿,但是如果不加收敛,接下来的日子就只能吃土了,所以,他决定只向前,不回头,花最少的钱,在美食节上吃出一条血路。在美食节的矩形地图中,LP站在左上角的入口,请帮助Ta到达右下角的出口。

    输入描述:

    第一行包含一个正整数T(T<=10),表示有T组测试数据。
    每组数据第一行包含一个正整数n(3 <= n<=20)。
    给定一个n*n矩阵图,从左上角开始每次只能向右或者向下走,最后到达右下角的位置,路径上所有的数字累加起来就是花费和,返回所有路径中最
    小的花费和。

    无摊位时花费为0,不会有负花费。

    输出描述:

    对于每一组数据,有一行输出,返回最小花费,最后输出无换行。
    示例1

    输入

    复制
    1
    5
    25 81 51 98 43 
    19 10 36 81 91 
    95 38 7 84 40 
    87 27 72 9 30 
    33 81 68 21 71

    输出

    复制
    270

    解题思路:简单dp(状态转移方程:dp[i][j]=min(dp[i][j-1],dp[i-1][j])+a[i][j];

    AC代码:

    #pragma GCC optimize(2)
    #include<bits/stdc++.h>
    using namespace std;
    inline int read() {int x=0,f=1;char c=getchar();while(c!='-'&&(c<'0'||c>'9'))c=getchar();if(c=='-')f=-1,c=getchar();while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return f*x;}
    typedef long long ll;
    const int maxn = 1e9+10;
    int a[1000][1000];
    int dp[1000][1000];
    int main()
    {
        int t;
        cin>>t;
        while(t--){
            int n;
            cin>>n;
            for(int i=1;i<=n;i++){
                for(int j=1;j<=n;j++){
                    cin>>a[i][j];
                }
            }
            memset(dp,maxn,sizeof(dp));
            dp[0][1]=0;
            dp[0][0]=0;
            for(int j=1;j<=n;j++){
                for(int i=1;i<=n;i++){
                    dp[i][j]=min(dp[i][j-1],dp[i-1][j])+a[i][j];
                }
            }
            printf("%d
    ",dp[n][n]);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    DNS正向反向解析
    varnish-4.0.5的反向代理 缓存测试 负载均衡实验
    DS8700 硬盘更换略
    ftp虚拟用户
    maven mvn 命令行 编译打包
    linux下的springboot项目启动文件
    linux系统安装gcc
    linux系统下安装两个或多个tomcat
    linux系统的磁盘挂载
    常用linux命令
  • 原文地址:https://www.cnblogs.com/lipu123/p/12149114.html
Copyright © 2011-2022 走看看