POJ - 1157 LITTLE SHOP OF FLOWERS

题目大意: 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;
}

你可能感兴趣的:(POJ - 1157 LITTLE SHOP OF FLOWERS)