NOI:2728 摘花生

题目链接


题解:动态规划,每个点的最大花生数等于走东和走南两条路的最大花生数,终点的花生数就是她本身的花生数量,从终点依次往上推,就可以得出起始点的最大数量

#include <stdio.h>
#include <iostream>
using namespace std;
int a[105][105],b[105][105];
int r,c;
int tmp(int x,int y){
    if(b[x][y]!=0)return b[x][y];
    if(y+1>=c){
        b[x][y]=max(b[x][y],tmp(x+1, y))+a[x][y];
        return b[x][y];
    }else if(x+1>=r){
        b[x][y]=max(b[x][y],tmp(x, y+1))+a[x][y];
        return b[x][y];
    }else{
        int t=max(tmp(x,y+1),tmp(x+1, y));
        b[x][y]=max(t,b[x][y])+a[x][y];
        return b[x][y];
    }
}
int main(){
    int k;
    cin>>k;
    while(k--){
        cin>>r>>c;
        for(int i=0;i<r;i++){
            for(int j=0;j<c;j++){
                cin>>a[i][j];
                b[i][j]=0;
            }
        }
        b[r-1][c-1]=a[r-1][c-1];
        int t=0;
        for(int i=0;i<r;i++){
            for(int j=0;j<c;j++){
                t=max(t,tmp(i,j));
            }
        }
        cout<<t<<endl;
    }
}

猜你喜欢

转载自blog.csdn.net/wuzhenzi5193/article/details/80471287
今日推荐