C++:
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
using namespace std;
int n, m;
int f[2005][2005], day[2005][2005];
int main(){
scanf("%d%d", &n, &m);
for(int i = 1; i <= m; i++) {
for(int j =1; j <= n; j++) {
scanf("%d", &f[i][j]);
}
}
for(int j = 1; j <= n; j++) {
for(int i =1; i <= m; i++) {
if(i == 1){
day[i][j] = min(f[i][j]+day[i][j-1],f[i][j]+day[m][j-1]);
}else {
day[i][j] = min(f[i][j]+day[i][j-1], f[i][j]+day[i-1][j-1]);
}
}
}
int min_ = day[1][n];
for(int i = 2; i <= m; i++) {
if(day[i][n]<min_) {
min_ = day[i][n];
}
}
printf("%d",min_);
}
java:
import java.lang.Math;
import java.util.Scanner;
public class Main{
static int n, m;
static long[][] f = new long[2005][2005];
static long[][] day = new long[2005][2005];
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
for(int i = 1; i <= m; i++) {
for(int j =1; j <= n; j++) {
f[i][j]=sc.nextInt();
}
}
for(int j = 1; j <= n; j++) {
for(int i =1; i <= m; i++) {
if(i == 1){
day[i][j] = Math.min(f[i][j]+day[i][j-1],f[i][j]+day[m][j-1]);
}else {
day[i][j] = Math.min(f[i][j]+day[i][j-1], f[i][j]+day[i-1][j-1]);
}
}
}
long min_ = day[1][n];
for(int i = 2; i <= m; i++) {
if(day[i][n]<min_) {
min_ = day[i][n];
}
}
System.out.print(min_);
}
}