'commit'
This commit is contained in:
38
TangDou/AcWing/BeiBao/1013_YiWei.cpp
Normal file
38
TangDou/AcWing/BeiBao/1013_YiWei.cpp
Normal file
@@ -0,0 +1,38 @@
|
||||
#include <bits/stdc++.h>
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user