POJ1157 LITTLE SHOP OF FLOWERS

一.原题链接:http://poj.org/problem?id=1157

二.题意:题意看不懂啊,搜了一下,是给一个矩阵,每行取一个,下一行取的数的列数要大于上一行所取得列数。求所取的最大数。

三.思路:简单DP,我都能做的DP- -!dp[i][j]表示第i行取第j个的最大数。

dp[i][j] = dp[i][j] + max(dp[i-1][i-1], dp[i-1][i],.......dp[i-1][j-1]);

四.代码:

//POJ1157
#include <iostream>
#include <cstdio>
#include <algorithm>

using namespace std;

int nValue[7];

int dp[105][105];
const int INF = 1<<29;

int main()
{
   // freopen("in.txt", "r", stdin);
    int i, j, k, F, V, maxNum;
    cin>>F>>V;

    for(i = 0; i < F; i++)
        for(j = 0; j < V; j++)
            scanf("%d", &dp[i][j]);

    for(i = 1; i < F; i++){
        for(j = i; j < V; j++){
            maxNum = -INF;
            for(k = i - 1; k < j; k++){
                maxNum = max(maxNum, dp[i-1][k]);
            }
            dp[i][j] += maxNum;
        }
    }

    maxNum = -INF;

    for(i = F - 1; i < V; i++){
        maxNum = max(dp[F-1][i], maxNum);
    }

    cout<<maxNum<<endl;
    return 0;
}

 

你可能感兴趣的:(POJ1157 LITTLE SHOP OF FLOWERS)