题目链接:点击查看

题目大意:给出一个 n * m 的矩阵,每个矩阵的权值代表初始高度,现在需要从点 ( 0 , 0 ) 走到点 ( n - 1  , m - 1 ) ,需要满足以下条件:

  1. 每次只能向右或向下移动
  2. 假设当前格子的高度为 x ,只能移动到高度为 x + 1 的格子上去

初始时可以进行操作,使得某个格子的高度减少一个单位,问最少需要进行多少次操作,可以存在至少一条从点 ( 0 , 0 ) 到点 ( n , m ) 的路线

题目分析:因为每次只能向下或向右移动,不难联想到最基础的一个 dp 题目,就是给出一个 n * m 的二维矩阵,每个点都有权值,问如何行走能使得从点 ( 0 , 0 ) 到点 ( n - 1 , m - 1 ) 的权值和最大,类似的,在这个题目中如果知道了起点 ( 0 , 0 ) 的高度 h ,那么到达任意一个点 ( i , j ) 的高度应该为 h + i + j 才行,所以不难看出:

  1. 如果 h + i + j > a[ i ][ j ] ,说明点 ( i , j ) 不能走,视为障碍物即可
  2. 如果 h + i + j <= a[ i ][ j ] ,则经过点 ( i , j ) 的权值为 a[ i ][ j ] - ( h + i + j )

到此为止就和那个基础的 dp 一模一样了,时间复杂度为 O( n * n )

但是回到这个题目,初值该如何确定呢?如果暴力枚举的话,是有 1e15 个值,肯定会 TLE 的,其实不难猜到,选择初值的最优解肯定是让初始矩阵中尽可能多的数不变,起码至少得有一个数不变才行吧,所以我们可以 O( n * n ) 去枚举:令点 ( i , j ) 这个位置不变的初值,然后维护最小值就可以了

时间复杂度为 O( n ^ 4 )

代码:

#include<iostream>
#include<cstdio>
#include<string>
#include<ctime>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<stack>
#include<climits>
#include<queue>
#include<map>
#include<set>
#include<sstream>
using namespace std;typedef long long LL;typedef unsigned long long ull;const LL inf=0x3f3f3f3f3f3f3f3f;const int N=110;int n,m;LL maze[N][N],dp[N][N];LL solve(LL st)
{for(int i=0;i<n;i++)for(int j=0;j<m;j++)dp[i][j]=inf;dp[0][0]=0;for(int i=0;i<n;i++)for(int j=0;j<m;j++){LL cost=st+i+j;if(cost>maze[i][j])//如果当前格子不能走,则赋值为inf且不进行状态转移{dp[i][j]=inf;continue;}dp[i][j]+=maze[i][j]-cost;if(i+1<n)dp[i+1][j]=min(dp[i+1][j],dp[i][j]);if(j+1<m)dp[i][j+1]=min(dp[i][j+1],dp[i][j]);}return dp[n-1][m-1];
}int main()
{
#ifndef ONLINE_JUDGE
//  freopen("input.txt","r",stdin);
//  freopen("output.txt","w",stdout);
#endif
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){scanf("%d%d",&n,&m);for(int i=0;i<n;i++)for(int j=0;j<m;j++)scanf("%lld",&maze[i][j]);LL ans=inf;for(int i=0;i<n;i++)for(int j=0;j<m;j++)ans=min(ans,solve(maze[i][j]-i-j));printf("%lld\n",ans);}return 0;
}

CodeForces - 1353F Decreasing Heights(dp)相关推荐

  1. Codeforces 919D Substring (拓扑图DP)

    Codeforces 919D Substring (拓扑图DP) 手动博客搬家: 本文发表于20180716 10:53:12, 原地址https://blog.csdn.net/suncongbo ...

  2. [CodeForces 332B]Maximum Absurdity[DP]

    题目链接: [CodeForces 332B]Maximum Absurdity[DP] 题意分析: 寻找两个不重叠的长度为k的子串,使得它们之和最大. 解题思路: 第一想法是,处理出从这个点开始,长 ...

  3. 【CodeForces 1042B --- Vitamins】DP+位运算

    [CodeForces 1042B --- Vitamins]DP+位运算 题目来源:点击进入[CodeForces 1042B - Vitamins] Description Berland sho ...

  4. Codeforces Round #642 (Div. 3) F. Decreasing Heights 题解(dp+思维)

    题目链接 题目思路 emmm这个题目如果找到一个性质就很好了,就是如果确定a[1][1]的值,那么就一下确定了,而且a[1][1]的值只有n*m个.因为如果最终的合法路径每个格子都被操作了至少一次,那 ...

  5. [CodeForces 300D Painting Square]DP

    http://codeforces.com/problemset/problem/300/D 题意:每一次操作可以选一个正方形,令边长为n,如果n为奇数那么可以从中间画一个十字,分成4个大小相等的边长 ...

  6. Codeforces 1322D Reality Show (DP)

    题目链接 https://codeforces.com/contest/1322/problem/D 题面写得非常模糊,很容易读错题,建议参考翻译:https://www.luogu.com.cn/p ...

  7. BNUOJ 52325 Increasing or Decreasing 数位dp

    题目链接: https://acm.bnu.edu.cn/v3/contest_show.php?cid=8506#problem/I I. Increasing or Decreasing Case ...

  8. CodeForces - 1579G Minimal Coverage(dp)

    题目链接:点击查看 题目大意:给出 nnn 个长度不同的木棍.设第 i−1i-1i−1 次放置木棍后的终点为 xxx,那么第 iii 个木棍有且仅有两种放置方法: 放到 [x+1,x+a[i]][x+ ...

  9. CodeForces - 1562E Rescue Niwen!(dp)

    题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串 sss,将其子串按顺序展开成序列,即 {s1,s1s2,⋯,s1s2-sn,s2,s2s3,s2s3-sn,s3,s3s4,⋯,sn−1 ...

最新文章

  1. oracle 数据库备份恢复
  2. CPUID详解[增加TLB与Cache]
  3. 介绍一个新鲜玩意 开源的杀毒软件
  4. python小孩的报酬_孩子做了家务,家长该不该支付“酬劳”呢?
  5. mysql insert 错误码_利用 MySQL 自身错误诊断区域-爱可生
  6. SpringBoot2.0 基础案例(15):配置MongoDB数据库,实现增删改查逻辑
  7. 文字穿插在海报设计中的不同用法
  8. while 循环java_Java做while循环
  9. android通讯录字母特效,Flutter 城市/通讯录列表字母索引联动效果实现
  10. 七款修复工具介绍:不仅能修复U盘,SD卡、TF卡也能修复!
  11. memcached-tool
  12. CGB2202-DAY02-IO低级流与高级流
  13. 10.24程序员节专辑——程序员最爱的数字,1024的秘密
  14. 苹果手机开热点电脑/安卓手机无法链接?
  15. 2021年全球与中国油管线轴行业市场规模及发展前景分析
  16. opencv滤镜-素描
  17. MP4文件格式简要解析---代码解析
  18. 解决office2010安装过程出错的问题
  19. 网页链接跳转qq聊天界面以及QQ群是什么实现的
  20. linux Deploy 安装debian

热门文章

  1. Java 网关-Servlet Gateway
  2. mybatis-批量插入
  3. 收货地址 - 设置默认收货地址
  4. 获取Class类对象的三种方式
  5. 字节流写数据加异常处理
  6. Function接口练习之按照指定要求操作数据
  7. SpringMVC的数据响应-回写数据-直接回写字符串(应用)
  8. 区域数据导入功能(OCUpload插件使用)
  9. RocketMQ快速入门之手动创建topic
  10. React相关资源推荐