RT,代码如下:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,m,a[105][105],dp[105][105],ans[105][105];
void print(ll x,ll y)
{
if(x==0)
return;
print(ans[x][y],y-1);
cout<<x<<' ';
}
int main()
{
while(~scanf("%lld%lld",&n,&m))
{
memset(dp,0x3f,sizeof(dp));
memset(ans,0,sizeof(ans));
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
cin>>a[i][j];
for(int i=1;i<=n;++i)
dp[i][1]=a[i][1];
for(int j=1;j<m;++j)
for(int i=1;i<=n;++i)
{
ll x,y;
if(i==1)
x=n,y=2;else
if(i==n)
x=n-1,y=1;else
x=i-1,y=i+1;
if(dp[i][j]+a[x][j+1]<dp[x][j+1])
dp[x][j+1]=dp[i][j]+a[x][j+1],ans[x][j+1]=i;
if(dp[i][j]+a[i][j+1]<dp[i][j+1])
dp[i][j+1]=dp[i][j]+a[i][j+1],ans[i][j+1]=i;
if(dp[i][j]+a[y][j+1]<dp[y][j+1])
dp[y][j+1]=dp[i][j]+a[y][j+1],ans[y][j+1]=i;
}
int ansid=0;
for(int i=1;i<=n;++i)
if(dp[ansid][m]>dp[i][m])
ansid=i;
print(ans[ansid][m],m-1);
cout<<ansid<<'\n'<<dp[ansid][m]<<'\n';
}
return 0;
}