TYVJ1124 花店橱窗

   http://www.tyvj.cn/Problem_Show.aspx?id=1124

  设状态dp[i][j] 为第i个花放入第j个瓶子里所能得到的最大价值  且  (i<=j<=i+m-n)

  dp[i][j] = max{dp[i-1][k]  |  i-1<=k<j}  + a[i][j] (a[i][j]为第i个花放入第j个瓶的价值)

  每次转移的时候记录下路径,输出的时候dfs回去就ok了~

  

  

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cstdlib>
 4 #include <algorithm>
 5 #include <vector>
 6 #include <cmath>
 7 #include <string>
 8 #include <map>
 9 #include <iostream>
10 using namespace std;
11 typedef long long LL;
12 const int maxn = 105;
13 const int maxv = 1005;
14 const int mod = 1e9+7;
15 const int INF = 0x3f3f3f3f;
16 int dp[maxn][maxn],a[maxn][maxn];
17 int path[maxn][maxn];
18 int n,m;
19 void dfs(int i,int j)
20 {
21     if(i==1)
22     {
23         printf("%d ",j);
24         return;
25     }
26     dfs(i-1,path[i][j]);
27     printf("%d",j);
28     if(i!=n)printf(" ");
29 }
30 int main()
31 {
32 //    freopen("in.txt","r",stdin);
33     while(cin>>n>>m)
34     {
35         for(int i = 1;i<=n;++i)
36             for(int j = 1;j<=m;++j)
37                 scanf("%d",&a[i][j]);
38         memset(dp,0,sizeof(dp));
39         memset(path,-1,sizeof(path));
40         int x = m-n;
41         for(int i = 1;i<=n;++i)
42         {
43             int up = i+x;
44             for(int j = i;j<=up;++j)
45             {
46                 dp[i][j] = dp[i-1][i-1]+a[i][j];
47                 path[i][j] = i-1;
48                 for(int k = i;k<j;++k)
49                 {
50                     if(dp[i][j]<dp[i-1][k]+a[i][j])
51                     {
52                         dp[i][j] = dp[i-1][k]+a[i][j];
53                         path[i][j] = k;
54                     }
55                 }
56             }
57         }
58         int ans = -INF,ans_x;
59         for(int i = n;i<=m;++i)if(ans<dp[n][i])
60         {
61             ans = dp[n][i];
62             ans_x = i;
63         }
64         cout<<ans<<endl;
65         dfs(n,ans_x);
66         puts("");
67     }
68     return 0;
69 }
时间: 2024-08-14 18:26:06

TYVJ1124 花店橱窗的相关文章

tyvj1124花店橱窗——有限制的DP

题目:http://www.joyoi.cn/problem/tyvj-1124 此题首先注意一束花能往哪些花瓶中放置:原本应放在本位置,但因为有多余花瓶,故可以有些变动,范围在i~i+v-f间: 假设选择此花瓶,则对其上一束花的摆放位置有要求:放在此花瓶之前:故再用k循环一遍: 输出路径在上一步中记录,只需以角标记录此花这种摆放方式对应的上一束花的摆放位置,递归输出即可. 代码如下: #include<iostream> #include<cstdio> using namesp

RQNOJ PID496/[IOI1999]花店橱窗布置

PID496 / [IOI1999]花店橱窗布置 ☆ 题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序 编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识.如果I < J,则花束I必须放在花束J左边的花瓶中.例如,假设杜鹃花的标识数为1,秋海棠的标识数为2,康乃馨的标识数为3,所有花束在放入花瓶时必须保持其标识 数的顺序,即杜鹃花必须放在秋海棠左边的花瓶中,秋海棠必须放在康乃馨左边的花瓶中.如果

1028 花店橱窗布置

1028 花店橱窗布置 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 假设以最美观的方式布置花店的橱窗,有F束花,V个花瓶,我们用美学值(一个整数)表示每束花放入每个花瓶所产生的美学效果.为了取得最佳的美学效果,必须使花的摆放取得最大的美学值. 输入描述 Input Description 第一行为两个整数F,V(F<=V<=100) 接下来F行每行V个整数,第i行第j个数表示第i束花放入第j个花瓶的美学值. 输

花店橱窗(flower)

花店橱窗(flower) 题目描述 某花店现有f束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1:到f的整数标识.如果i 输入 第1行两个整数f和V,分别为花束数和花瓶数(1≤f≤100,f≤V≤I00).接下来是矩阵Aij,它有i行,每行j个整数,hij表示花束i摆放在花瓶j中的美学值. 输出 第1行是一个整数,为最大的美学值:接下来有f行,每行两个数,为那束花放入那个花瓶的编号

P1854 花店橱窗布置

P1854 花店橱窗布置 题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识.如果I < J,则花束I必须放在花束J左边的花瓶中.例如,假设杜鹃花的标识数为1,秋海棠的标识数为2,康乃馨的标识数为3,所有花束在放入花瓶时必须保持其标识数的顺序,即杜鹃花必须放在秋海棠左边的花瓶中,秋海棠必须放在康乃馨左边的花瓶中.如果花瓶的数目大于花束的数目,则多余

花店橱窗设计 (动态规划)

[问题描述] 假设以最美观的方式布置花店的橱窗,有F束花,每束花的品种都不一样,同时,至少有 同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,并从左到右,从1到V顺序编 号,V 是花瓶的数目,编号为1的花瓶在最左边,编号为V的花瓶在最右边,花束可以移动, 并且每束花用1到F 的整数惟一标识,标识花束的整数决定了花束在花瓶中列的顺序即如果 i < j,则花束i 必须放在花束j左边的花瓶中. 例如,假设杜鹃花的标识数为1,秋海棠的标识数为2,康乃馨的标识数为3,所有的花束在 放入花瓶时必须保持

codevs1028花店橱窗布置(费用流)

这几天刚学了费用流,找到了这道题来练一练手. 题目: 题目描述 Description 假设以最美观的方式布置花店的橱窗,有F束花,V个花瓶,我们用美学值(一个整数)表示每束花放入每个花瓶所产生的美学效果.为了取得最佳的美学效果,必须使花的摆放取得最大的美学值. 输入描述 Input Description 第一行为两个整数F,V(F<=V<=100) 接下来F行每行V个整数,第i行第j个数表示第i束花放入第j个花瓶的美学值. 输出描述 Output Description 一个整数,即最大美

洛谷 P1854 花店橱窗布置

题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识.如果I < J,则花束I必须放在花束J左边的花瓶中.例如,假设杜鹃花的标识数为1,秋海棠的标识数为2,康乃馨的标识数为3,所有花束在放入花瓶时必须保持其标识数的顺序,即杜鹃花必须放在秋海棠左边的花瓶中,秋海棠必须放在康乃馨左边的花瓶中.如果花瓶的数目大于花束的数目,则多余的花瓶必须空,即每个花瓶只

luogu P1854 花店橱窗布置

题目描述 某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目.花束可以移动,并且每束花用1到F的整数标识.如果I < J,则花束I必须放在花束J左边的花瓶中.例如,假设杜鹃花的标识数为1,秋海棠的标识数为2,康乃馨的标识数为3,所有花束在放入花瓶时必须保持其标识数的顺序,即杜鹃花必须放在秋海棠左边的花瓶中,秋海棠必须放在康乃馨左边的花瓶中.如果花瓶的数目大于花束的数目,则多余的花瓶必须空,即每个花瓶只