[提高课](1015. 摘花生 - AcWing题库)
- 左边的最大值: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])
}
}