#include using namespace std; const int N = 20; int f[N]; int w[N]; int path[N][N]; //致敬墨染空大神 void out(int i, int j) { if (i == 0) return; //走出界就完事了 int k = path[i][j]; out(i - 1, j - k); //利用递推的栈机制,后序输出,太强了~ printf("%d %d\n", i, k); } int main() { int n, m; scanf("%d%d", &n, &m); for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) scanf("%d", &w[j]); for (int j = m; j; j--) for (int k = 1; k <= j; k++) { int val = f[j - k] + w[k]; if (val >= f[j]) { f[j] = val; //在状态转移时,记录路径 path[i][j] = k; } } } //输出结果 printf("%d\n", f[m]); //输出路径 out(n, m); return 0; }