链接:https://ac.nowcoder.com/acm/contest/984/K
来源:牛客网

金币馅饼
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
最近,奶牛们热衷于把金币包在面粉里,然后把它们烤成馅饼。第i块馅饼中含有Ni(1<=Ni<=25)块金币,并且,这个数字被醒目地标记在馅饼表面。
奶牛们把所有烤好的馅饼在草地上排成了一个R行(1<=R<=100)C列(1<=C<=100)的矩阵。你现在站在坐标为(1,1)的馅饼边上,当然,你可以拿到那块馅饼里的所有金币。你必须从现在的位置,走到草地的另一边,在坐标为(R,C)的馅饼旁边停止走动。每做一次移动,你必须走到下一列的某块馅饼旁边,并且,行数的变动不能超过1(也就是说,如果现在你站在坐标为(r,c)的馅饼边上,下一步你可以走到坐标为(r-1,c+1),(r,c+1),或者(r+1,c+1)的馅饼旁边)。当你从一块馅饼边经过,你就可以拿走馅饼里所有的金币。当然啦,你一定不会愿意因半路离开草地而失去唾手可得的金币,但,最终你一定得停在坐标为(R,C)的馅饼旁边。
现在,你拿到了一张标记着馅饼矩阵中,每一块馅饼含金币数量的表格。那么,按照规则,你最多可以拿到多少金币呢?
比方说,奶牛们把馅饼排成如下的矩阵,矩阵中的数字表示该位置的馅饼中含金币的数量:

起点-> 6 5 3 7 9 2 7
2 4 3 5 6 8 6
4 9 9 9 1 5 8 <-终点
以下是一条合法的路线:

起点-> 6 5 3 7 9 2 7
2 4 3 5 6 8 6
  / 4 9 9-9 1 5-8 <-终点
按上述的路线进行走动,一共可以获得6+4+9+9+6+5+8=47个金币。按照规则,在这个矩阵中最多可以得到50个金币,路线如下图所示:

起点-> 6 5 3 7 9 2 7
2 4 3 5 6-8 6
  / 4 9 9-9 1 5 8 <-终点
(请复制到记事本中用等宽字体查看)

输入描述:
第1行: 两个用空格隔开的整数,R和C
第2..R+1行: 每行包含C个用空格隔开的正整数,依次表示一行中从左往右各个馅饼里金币的数量
输出描述:
第1行: 输出一个正整数,表示你所能收集到的最大金币数目
示例1
输入
复制
3 7
6 5 3 7 9 2 7
2 4 3 5 6 8 6
4 9 9 9 1 5 8
输出
复制
50

思路:
直接二维DP 嘛,每一个位置可能由最多3个位置转移过来,还需要注意一下有些位置是没法访问到的,比如第一列,只有1,1这个位置可以访问,其他均无法到达,转移的时候需要判断一下。

细节见代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define ALL(x) (x).begin(), (x).end()
#define rt return
#define dll(x) scanf("%I64d",&x)
#define xll(x) printf("%I64d\n",x)
#define sz(a) int(a.size())
#define all(a) a.begin(), a.end()
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define eps 1e-6
#define gg(x) getInt(&x)
#define chu(x) cout<<"["<<#x<<" "<<(x)<<"]"<<endl
using namespace std;
typedef long long ll;
ll gcd(ll a, ll b) {return b ? gcd(b, a % b) : a;}
ll lcm(ll a, ll b) {return a / gcd(a, b) * b;}
ll powmod(ll a, ll b, ll MOD) {ll ans = 1; while (b) {if (b % 2)ans = ans * a % MOD; a = a * a % MOD; b /= 2;} return ans;}
inline void getInt(int* p);
const int maxn = 1000010;
const int inf = 0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
int dp[105][105];
int a[105][105];
int n,m;
int main()
{//freopen("D:\\code\\text\\input.txt","r",stdin);//freopen("D:\\code\\text\\output.txt","w",stdout);gbtb;cin>>n>>m;repd(i,1,n){repd(j,1,m){cin>>a[i][j];}}memset(dp,-1,sizeof(dp));dp[1][1]=a[1][1];repd(j,2,m){repd(i,1,n){if(dp[i][j-1]!=-1)dp[i][j]=max(dp[i][j],dp[i][j-1]+a[i][j]);if(dp[i+1][j-1]!=-1)dp[i][j]=max(dp[i][j],dp[i+1][j-1]+a[i][j]);if(dp[i-1][j-1]!=-1)dp[i][j]=max(dp[i][j],dp[i-1][j-1]+a[i][j]);}}dp[n][m]=max(dp[n][m],0);cout<<dp[n][m]<<endl;return 0;
}inline void getInt(int* p) {char ch;do {ch = getchar();} while (ch == ' ' || ch == '\n');if (ch == '-') {*p = -(getchar() - '0');while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 - ch + '0';}}else {*p = ch - '0';while ((ch = getchar()) >= '0' && ch <= '9') {*p = *p * 10 + ch - '0';}}
}

转载于:https://www.cnblogs.com/qieqiemin/p/11253225.html

牛客假日团队赛5 K 金币馅饼 (DP 基础题)相关推荐

  1. 牛客假日团队赛8:K.Cow Contest(最短路(floyd)变形)

    链接:https://ac.nowcoder.com/acm/contest/1069/K 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6553 ...

  2. 牛客网 - [牛客假日团队赛5]金币馅饼(dp)

    题目链接:https://ac.nowcoder.com/acm/contest/984/K/ 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言65536K 64 ...

  3. 牛客假日团队赛8:F.Telephone Lines(二分+spfa)

    链接:https://ac.nowcoder.com/acm/contest/1069/F 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6553 ...

  4. 牛客假日团队赛8:H.Cell Phone Network(最小支配集)

    链接:https://ac.nowcoder.com/acm/contest/1069/A 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6553 ...

  5. 牛客假日团队赛10 L 乘积最大 (dp,大数)

    链接:https://ac.nowcoder.com/acm/contest/1072/L?&headNav=acm&headNav=acm 来源:牛客网 乘积最大 时间限制:C/C+ ...

  6. P5200 [USACO19JAN]Sleepy Cow Sorting 牛客假日团队赛6 D 迷路的牛 (贪心)

    链接:https://ac.nowcoder.com/acm/contest/993/E 来源:牛客网 对牛排序 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言 ...

  7. 牛客假日团队赛5J 护城河 bzoj 1670: [Usaco2006 Oct]Building the Moat护城河的挖掘 (凸包的周长)...

    链接:https://ac.nowcoder.com/acm/contest/984/J 来源:牛客网 护城河 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其他语言6 ...

  8. 牛客假日团队赛5 L Catch That Cow HDU 2717 (BFS)

    链接:https://ac.nowcoder.com/acm/contest/984/L 来源:牛客网 Catch That Cow 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 3 ...

  9. 牛客假日团队赛12【为了抽奖闲来做题2】

    A题 链接:https://ac.nowcoder.com/acm/contest/1081/A 来源:牛客网 Bessie is trapped in a triangular maze with ...

最新文章

  1. 深度研报:六大视角解读人工智能,AI岂止于技术
  2. 教师课堂教学必备的100个妙招,总有一个适合你!
  3. confluence6.15.4部署及问题汇总
  4. NFS应用场景及环境搭建
  5. 【Android 插件化】基于插件化引擎的“恶意应用“与“良性应用“区别 | 恶意插件化应用特征
  6. 帝国cms调用栏目自定义字段(栏目简介)如何操作
  7. 算命大仙的黄金时代?一年轻松赚5亿…..
  8. 屏下摄像头技术来了!OPPO FindX2有望率先搭载
  9. python3中使用Redis
  10. 杭电2529Shot
  11. 全国专业技术人员计算机应用能力考试题,2017年全国专业技术人员计算机应用能力考试题库...
  12. 【C++ primer】第七章 函数-C++的编程模块
  13. 自动化部署mysql主从复制集群_使用docker部署mysql主从复制集群
  14. js复杂对象和简单对象的简单转化
  15. dcdc升压计算器excel_DC-DC电路计算器app下载|DC-DC电路计算器安卓版下载_v1.0.1_9ht安卓下载...
  16. qu32调音台说明书_调音台图解及使用说明
  17. 白领控诉:被逼下乡5年,我们的幸福何处寻找
  18. 长见识了: 一篇文章带你看懂 硬盘数据恢复软件的原理
  19. 关于Flash的几点思考(Thoughts on Flash)
  20. Docker搭建、启动、关闭MySQL服务

热门文章

  1. 源码学习之RunWith annotation used in JUnit debug
  2. LR录制脚本中文乱码问题
  3. 动态加载___import__动态加载技术
  4. easyswoole和mixphp_swoole框架都有哪些
  5. ERROR: No query specified(Mysql数据库报错)
  6. 华为鸿蒙全能家居,能兑现多少?华为智慧屏十年不过时,用鸿蒙理念做智能家居...
  7. python psycopg2_python2.7 psycopg2
  8. 有效的数独Python解法
  9. python os.system 512_python os.system os.popen 区别
  10. 以下哪个不是python财经数据接口工具_这7种Python的全新玩法,大部分人都不知道!...