#include <bits/stdc++.h> using namespace std; int main(){ int n,m,i,j,k;//n行,m列 int a[110][110] = {0}; int b[110][110] = {0}; //存放路径 int r[10010] = {0}; cin>>n>>m; for(i = 1;i <= n;i++){ for(j = 1;j <= m;j++){ cin>>a[i][j]; } } //算出走到每个点,最多能摘到的花生 for(i = 1;i <= n;i++){ for(j = 1;j <= m;j++){ b[i][j] = a[i][j];//记录原始数据 a[i][j] = a[i][j] + max(a[i][j-1],a[i-1][j]); } } //第一个点是已知点 r[1] = b[n][m];//最后一个点的值 k = 2;//第二个点开始探索 int x = n; int y = m; //截止到1 1点结束 while(x != 1 || y != 1){ //如果上面的大说明从上面来,否则从左边来 if(b[x-1][y] > b[x][y-1]){ r[k] = b[x-1][y]; x--; } else{ r[k] = b[x][y-1]; y--; } k++; } //逆序输出结果 for(i = k-1;i >= 1;i--){ if(i != 1){ cout<<r[i]<<"-"; }else{ cout<<r[i]<<endl; } } } /************************************************************** Problem: 1374 User: admin Language: C++ Result: Accepted Time:14 ms Memory:2084 kb ****************************************************************/