动态规划问题——1015. 摘花生(AcWing题库)
Posted 芜独独
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态规划问题——1015. 摘花生(AcWing题库)相关的知识,希望对你有一定的参考价值。
题目来源:https://www.acwing.com/problem/content/1017/
思路
分成往东和往西(横向和竖向)还有其他(汇聚一点)三种移动方式考虑。最后的花生在最后的点。
代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=1000;
int f[N][N];//得到的花生数
int a[N][N];//每个点的花生数
int t,r,c;//t是存几个数组,r和c分别是该数组的行和列
int main()
cin>>t;
for (int i=0;i<t;i++)
cin>>r>>c;
for(int j=1;j<=r;j++)
for(int k=1;k<=c;k++)
cin>>a[j][k];
memset(f,0,sizeof(f));
for(int j=1;j<=r;j++)
for(int k=1;k<=c;k++)
if(j==1)
f[j][k]=f[j][k-1]+a[j][k];//向东
else if(k==1)
f[j][k]=f[j-1][k]+a[j][k];//向南
else //向北和向西
f[j][k]=max(f[j-1][k],f[j][k-1])+a[j][k];
cout<<f[r][c]<<endl;
return 0;
以上是关于动态规划问题——1015. 摘花生(AcWing题库)的主要内容,如果未能解决你的问题,请参考以下文章