题目大意: F束花插入V个瓶子里面,花要按编号插,不同花插入不同的花瓶有不同的美观程度,要求最大的美观程度。
解题思路: 状态函数为f[i][j]表示第i束花插入前j个瓶子里面。则状态转移函数为f[i][j]=max(f[i-1][j-1]+a[i][j],f[i][j-1])
因为有两种插法,一:第i束花插入第j个瓶子里面,则为f[i][j]=f[i-1][j-1]+a[i][j].二:第i束花不插入第j个瓶子里面,则f[i][j]=f[i][j-1]。两者当中取极大者
#include <cstdio>
#include <algorithm>
using namespace std;
int main() {
int F, V;
while (scanf("%d%d", &F, &V) != EOF) {
int A, cur = 0, pre = 1, DP[2][110] = {-0x3f3f3f3f};
for (int i = 1; i <= F; i++) {
for (int j = 1; j <= V; j++) {
scanf("%d", &A);
if (j >= i && j <= V - F + i)
DP[cur][j] = max(DP[cur][j-1], DP[pre][j-1] + A);
else
DP[cur][j] = -0x3f3f3f3f;
}
swap(cur, pre);
}
printf("%d\n", DP[pre][V]);
}
return 0;
}