Acwing1015.摘花生

76 阅读1分钟

[提高课](1015. 摘花生 - AcWing题库)

image.png

  • 左边的最大值:f[i-1,j]+w[i,j]
  • 右边的最大值:f[i,j-1]+w[i,j]
    最后取max得到f[i,j]
C++代码
#include<iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int n,m;
int w[N][N];
int f[N][N];
int T;
int main(){
    cin>>T;
    while(T--){
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                cin>>w[i][j];
            }
        }
        
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                f[i][j]=max(f[i-1][j],f[i][j-1])+w[i][j];
            }
        }
        cout<<f[n][m]<<endl;
    }
    return 0;
}
Go代码
package main

import (
	"bufio"
	"fmt"
	"os"
)

const N = 110

var f, w [N][N]int
var in = bufio.NewReader(os.Stdin)
var out = bufio.NewWriter(os.Stdout)

func max(a, b int) int {
	if a < b {
		return b
	}
	return a
}
func main() {
	defer out.Flush()
	var t int
	for fmt.Fscan(in, &t); t != 0; t-- {
		var n, m int
		fmt.Fscan(in, &n, &m)
		for i := 1; i <= n; i++ {

			for j := 1; j <= m; j++ {
				fmt.Fscan(in, &w[i][j])
			}
		}
		for i := 1; i <= n; i++ {
			for j := 1; j <= m; j++ {
				f[i][j] = max(f[i-1][j], f[i][j-1]) + w[i][j]
			}
		}
		fmt.Fprintln(out, f[n][m])
	}
}