POJ 1157 LITTLE SHOP OF FLOWERS (线性dp)

OJ题目:click here~~

题目分析:f个束花,编号为1…… f。v个花瓶,编号为1 …… v。编号小的花束,所选花瓶的编号也必须比编号大的花束所选花瓶的编号小,即花i 选k, 花j选t ,如果i < j ,则定有k < t 。 如果 i > j , 则定有 k > t 。 每束花放在每个花瓶里有一个值。求f束花,能得到的最大值。

设dp[ i ][ j ] 为第 i 束花选择了第 j 个花瓶 , 则转移方程为

dp[ i ][ j ] =  max(dp[ i  - 1][ k ] + num[ i ][ j ]) , k为第 i - 1  束花能选择的花瓶范围。

AC_CODE

const int inf = 1<<20;
int num[102][102];
int   main(){
      int f , v , i , j , k ;
      while(cin >> f >> v){
            int dp[102][102];
            for(i = 0;i <= f;i++)
                for(j = 0;j <= v;j++)
                    dp[i][j] = -inf;
            dp[0][0] = 0;
            for(i = 1;i <= f;i++)
                for(j = 1;j <= v;j++)
                scanf("%d",&num[i][j]);
            for(i = 1;i <= f;i++){//花
                for(j = i;j <= v-(f-i);j++){//选择花瓶
                        for(k = i - 1;k < j;k++)//前一束花选择了k
                            dp[i][j] = max(dp[i][j] , dp[i - 1][k] + num[i][j]);
                }
            }
            cout << *max_element(dp[f] + f, dp[f] + 101) << endl;
      }

      return 0 ;
}

POJ 1157 LITTLE SHOP OF FLOWERS (线性dp),码迷,mamicode.com

时间: 2024-10-07 11:16:18

POJ 1157 LITTLE SHOP OF FLOWERS (线性dp)的相关文章

poj - 1157 - LITTLE SHOP OF FLOWERS(dp)

题意:F朵花(从左到右标号为1到F,1 <= F <= 100)放入V个花瓶(从左到右标号为1到V,F <= V <= 100),花 i 要放在花 j 的左边,如果i < j,每朵花放入每个花瓶有一个好看度(-50 <= Aij <= 50),求所有花放入花瓶后的最大好看度和. -->>设dp[i][j]表示将前j种花放入前i个花瓶的最大好看度和,则状态转移方程为: dp[i][j] = max(dp[i - 1][j], dp[i - 1][j -

POJ 题目1157 LITTLE SHOP OF FLOWERS(DP)

LITTLE SHOP OF FLOWERS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 19457   Accepted: 8966 Description You want to arrange the window of your flower shop in a most pleasant way. You have F bunches of flowers, each being of a different

POJ 1157 - LITTLE SHOP OF FLOWERS

据说是经典dp问题? 对于每个a[i][j],表示第 i 种花放在第 j 个花瓶里时产生的美学价值(aesthetic value), 我们用dp[i][j]表示共 i 种花放到 j 个花瓶里,产生的最大美学价值(显然这需要i<=j). 那么我们的答案也很简单,就是dp[F][V]. 那么接下来就是状态转移方程, 因为每个dp[i][j]:共 i 种花放到 j 个花瓶里,都有两种情况: ①第 i 种花放到第 j 个花瓶里,那么显然,前面的 i - 1 种花,就只能放到 j - 1 个瓶里,可以表

POJ 1958 Strange Towers of Hanoi (线性dp,记忆化搜索)

JQuery工具方法. (1)$.isNumeric(obj) 此方法判断传入的对象是否是一个数字或者可以转换为数字. isNumeric: function( obj ) { // parseFloat NaNs numeric-cast false positives (null|true|false|"") // ...but misinterprets leading-number strings, particularly hex literals ("0x...&

POJ 1163 The Triangle (简单线性dp)

OJ题目 : click here~~ 题目分析:给一个数字三角形,从最上面一个数字开始,方向只能往左下或者右下,一直到最后一行,求经过的所有数字和的最大值. 搞清楚在输入的数据中,route的方向就行. AC_CODE int num[102][102]; int main(){ int n , i , j , k ; while(cin >> n){ int x[102][102]; for(i = 1;i <= n;i++) for(j = 1;j <= i;j++) sca

Codeforces 474D Flowers (线性dp 找规律)

D. Flowers time limit per test:1.5 seconds memory limit per test:256 megabytes We saw the little game Marmot made for Mole's lunch. Now it's Marmot's dinner time and, as we all know, Marmot eats flowers. At every dinner he eats some red and white flo

poj 2533 Longest Ordered Subsequence(线性dp)

题目链接:http://poj.org/problem?id=2533 思路分析:该问题为经典的最长递增子序列问题,使用动态规划就可以解决: 1)状态定义:假设序列为A[0, 1, .., n],则定义状态dp[i]为以在所有的递增子序列中以A[i]为递增子序列的最后一个数字的所有递增子序列中的最大长度: 如:根据题目,在所有的以3结尾的递增子序列有[3]和[1, 3],所以dp[2] =2; 2)状态转移方程:因为当A[j] < A[i]时(0<= j < i),dp[i] = Max

【SGU】SGU每日练1&#183;Little shop of flowers【DP】

题目大意: 给你n*m的矩形(m >= n) 每个节点mp[i][j]有一个权值,从第一行走到最后一行,每一行只准选择一个数且对于i行,所选数的列数要严格大于i-1行选择的列数 问你最大权值是多少,并输出选择的n个列数 思路: DP方程非常好想:DP[i][j] = max(DP[i][j - 1], DP[i - 1][j - 1] + mp[i][j]); 找路径的话,可以每行可以从从i+1到m,也可以直接从i - 1开始找 也可以在DP里面做标记,状态转移的时候将此点记录! 但是不能想的太

POJ 1187 陨石的秘密 (线性DP)

题意: 公元11380年,一颗巨大的陨石坠落在南极.于是,灾难降临了,地球上出现了一系列反常的现象.当人们焦急万分的时候,一支中国科学家组成的南极考察队赶到了出事地点.经过一番侦察,科学家们发现陨石上刻有若干行密文,每一行都包含5个整数: 1 1 1 1 6 0 0 6 3 57 8 0 11 3 2845 著名的科学家SS发现,这些密文实际上是一种复杂运算的结果.为了便于大家理解这种运算,他定义了一种SS表达式: 1. SS表达式是仅由'{','}','[',']','(',')'组成的字符串