zoukankan      html  css  js  c++  java
  • POJ 1157 LITTLE SHOP OF FLOWERS

    题意:有n束花m个花瓶,m >= n,现在要把这n束花放花瓶里,可以有空花瓶,但是花的相对顺序必须按序号,告诉每束花放在不同花瓶里的价值,求能获得的最大价值。

    解法:dp。考虑dp[i][j]为前i束花放前j个花瓶的最高价值,则有状态转移方程:dp[i][j] = max(dp[i][j - 1], dp[i - 1][j - 1] + a[i][j]),前一个状态dp[i][j - 1]表示第j个花瓶是空瓶,后一个状态dp[i - 1][j - 1] + a[i][j]表示第j个花瓶里放第i束花,需要判断i和j的关系,如果i和j相等则不存在第一个状态,因为花瓶里必须有花。

    代码:

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    #include<string>
    #include<string.h>
    #include<math.h>
    #include<limits.h>
    #include<time.h>
    #include<stdlib.h>
    #include<map>
    #include<queue>
    #include<set>
    #include<stack>
    #include<vector>
    #define LL long long
    using namespace std;
    int main()
    {
        int n, m;
        while(~scanf("%d%d", &n, &m))
        {
            int dp[105][105] = {0};
            int a[105][150] = {0};
            for(int i = 1; i <= n; i++)
                for(int j = 1; j <= m; j++)
                {
                    scanf("%d", &a[i][j]);
                }
            for(int i = 1; i <= n; i++)
                for(int j = i; j <= m; j++)
                {
                    if(j > i) dp[i][j] = max(dp[i][j - 1], dp[i - 1][j - 1] + a[i][j]);
                    else dp[i][j] = dp[i - 1][j - 1] + a[i][j];
                }
            cout << dp[n][m] << endl;
        }
        return 0;
    }
    

      

  • 相关阅读:
    CSS3学习手记(7) CSS3装换 3D转换
    CSS3学习手记(6) CSS3装换 2D转换
    CSS3学习手记(5) 渐变
    CSS3学习手记(4) 伪元素
    CSS3学习手记(3) CSS权重
    CSS3学习手记(2) 伪类选择器
    CSS3学习手记(1) 选择器
    HTML5学习手记(二)
    HTML5学习手记(一)
    浏览器远程调试VS
  • 原文地址:https://www.cnblogs.com/Apro/p/4859219.html
Copyright © 2011-2022 走看看