ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

1.1数字三角形模型

2021-08-02 15:35:31  阅读:237  来源: 互联网

标签:const 题意 int 模型 花生 三角形 include scanf 1.1


1015.摘花生(简单)

题目描述:

给定行数为\(R\),列数为\(C\)的矩形花生地,每次可以向东或向南走,到了过一株花生苗就能摘走该它上面所有的花生。问从\((1,1)\)走到\((R,C)\)最多可以摘多少花生。

思路:

看到题意不难想到是动态规划。
由于题意里说了只能向东(右)或向南(下)走,所以对于上个状态到这个状态有两种决策:向上或向左
明白这点后,就可以直接使用\(y\)式\(DP\)分析法:

得到状态转移方程:

\(f[i,j]=max(f[i-1,j],f[i,j-1])+w[i,j]\)

Code:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 110;

int n, m;
int w[N][N];
int f[N][N];

int main()
{
    int T;
    scanf("%d", &T);
    while (T -- )
    {
        scanf("%d%d", &n, &m);
        for (int i = 1; i <= n; i ++ )
            for (int j = 1; j <= m; j ++ )
                scanf("%d", &w[i][j]);
        
        for (int i = 1; i <= n; i ++ )
            for (int j = 1; j <= m; j ++ )
                f[i][j] = max(f[i - 1][j], f[i][j - 1]) + w[i][j];
        
        printf("%d\n", f[n][m]);
    }
    return 0;
}

1018.最低通行费(简单)

题目描述:

有一个商人,在\(N×N\)的房间中\((1,1)\)处,每次可以向下或向右移动,到了每个位置都需要支付\(w[i,j]\)元,最多走\(2×N-1\)步,问走到\((N,N)\)最少花费是多少。

思路:

题意中最多走\(2×N-1\)步的意思就是不能走回头路,明白这点后就跟\(1015\).摘花生差不多了。
由于题意里说了只能向右或向下走,所以对于上个状态到这个状态有两种决策:向左或向上
要注意的是边界情况:

  1. 在第一行中,上一步只能是由\((x,y-1)\)转移得到
  2. 在第一列中,上一步只能是由\((x-1,y)\)转移得到

用\(y\)式\(DP\)分析法,可以得到:
\(f[i,j]=min(f[i-1,j],f[i,j-1])+w[i,j]\)

Code:

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 110;
const int INF = 0x3f3f3f3f;

int n;
int w[N][N];
int f[N][N];

int main()
{
    scanf("%d", &n);
    
    for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= n; j ++ )
            scanf("%d", &w[i][j]);
    // 初始化
    for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= n; j ++ )
            f[i][j] = INF;
    f[1][1] = w[1][1];
            
    for (int i = 1; i <= n; i ++ )
        for (int j = 1; j <= n; j ++ )
        {
            if (i > 1) f[i][j] = min(f[i][j], f[i - 1][j] + w[i][j]);  // 不在第一行
            if (j > 1) f[i][j] = min(f[i][j], f[i][j - 1] + w[i][j]);  // 不在第一列
        }
            
    printf("%d", f[n][n]);
    
    return 0;
}

标签:const,题意,int,模型,花生,三角形,include,scanf,1.1
来源: https://www.cnblogs.com/AndyLJX/p/15090052.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有