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 个瓶里,可以表示成 dp[i-1][j-1] + a[i][j];

  ②第 i 种花放不到第 j 个花瓶里,那么显然,总共 i 种花,就只能放到 j - 1 个瓶里,可以表示成 dp[i][j-1];

两种情况中大的那个,就是dp[i][j],即 dp[i][j]  = max( dp[i-1][j-1] + a[i][j] , dp[i][j-1] );

可以说是很巧妙的思路了。

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #define MAX 105
 5 using namespace std;
 6 int F,V,dp[MAX][MAX],a[MAX][MAX];
 7 int main()
 8 {
 9     while(scanf("%d%d",&F,&V)!=EOF)
10     {
11         memset(dp,0,sizeof(dp));
12         for(int i=1;i<=F;i++) for(int j=1;j<=V;j++) scanf("%d",&a[i][j]);
13         for(int i=1;i<=F;i++)
14         {
15             for(int j=i;j<=V;j++)
16             {
17                 if(j==i) dp[i][j]=dp[i-1][j-1]+a[i][j];
18                 else dp[i][j]=max(dp[i][j-1],dp[i-1][j-1]+a[i][j]);
19             }
20         }
21         printf("%d\n",dp[F][V]);
22     }
23 }
时间: 2024-08-02 10:45:14

POJ 1157 - LITTLE SHOP OF FLOWERS的相关文章

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]

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

sgu 104 Little Shop of Flowers

经典dp问题,花店橱窗布置,不再多说,上代码 #include <cstdio> #include <cstring> #include <iostream> #include <cstdlib> #include <algorithm> #define N 150 #define inf 0x7f7f7f7f using namespace std; int n, m; int val[N][N], f[N][N]; int fa[N][N];

【DP】POJ-1157 LITTLE SHOP OF FLOWERS

LITTLE SHOP OF FLOWERS Time Limit: 1000MS Memory Limit: 10000K 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 kind, and at least as many vases ordered in

POJ1157——LITTLE SHOP OF FLOWERS

LITTLE SHOP OF FLOWERS Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18481   Accepted: 8512 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

[POJ1157]LITTLE SHOP OF FLOWERS

试题描述 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 kind, and at least as many vases ordered in a row. The vases are glued onto the shelf and are numbered consecutiv

POJ1157 LITTLE SHOP OF FLOWERS DP

题目 http://poj.org/problem?id=1157 题目大意 有f个花,k个瓶子,每一个花放每一个瓶子都有一个特定的美学值,问美学值最大是多少.注意,i号花不能出如今某大于i号花后面.问最大美学值是多少 解题思路 dp[i][j]表示将第i个花插入第k个瓶子的最大美学值. 状态转移方程为dp[i][j] = max(dp[i-1][(i-1)~(k-f+i-1)]) + value[i][j] 代码 #include <cstdio> const int maxn = 110;

【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里面做标记,状态转移的时候将此点记录! 但是不能想的太