51Nod 1083 矩阵取数问题

来源:互联网 发布:淘宝分销一件代发 编辑:程序博客网 时间:2024/06/05 07:09

传送门:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1083

题目描述:一个N*N矩阵中有不同的正整数,经过这个格子,就能获得相应价值的奖励,从左上走到右下,只能向下向右走,求能够获得的最大价值。

f[i][j]表示到达i,j位置能够获得的最大价值,dp公式是f[i][j]=max{f[i-1][j],f[i][j-1]},边界条件f[0][j]=f[i][0]=-1,f[1][1]=a[1][1]。

#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>using namespace std;const int maxn = 505;int a[maxn][maxn],f[maxn][maxn];int main(){    int n;    cin>>n;    for(int i=1;i<=n;i++)        for(int j=1;j<=n;j++)        cin>>a[i][j];    memset(f,0,sizeof f);    for(int i=0;i<=n;i++)        f[i][0]=f[0][i]=-1;    f[1][1]=a[1][1];    for(int i=1;i<=n;i++)        for(int j=1;j<=n;j++)    {        if(i==1&&j==1) continue;        f[i][j]=max(f[i-1][j],f[i][j-1])+a[i][j];    }    cout<<f[n][n]<<endl;    return 0;}


0 0
原创粉丝点击