SGU 104
104. Little shop of flowers
time limit per test: 0.25 sec.
memory limit per test: 4096
KB
PROBLEM
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
consecutively 1 through V, where V is the number of vases, from left to right so that the vase 1 is the leftmost, and the vase V is the rightmost vase. The bunches are moveable and are uniquely identified by integers between 1 and F.
These id-numbers have a significance: They determine the required order
of appearance of the flower bunches in the row of vases so that the
bunch i must be in a vase to the left of the vase containing bunch j whenever i < j.
Suppose, for example, you have bunch of azaleas (id-number=1), a bunch
of begonias (id-number=2) and a bunch of carnations (id-number=3). Now,
all the bunches must be put into the vases keeping their id-numbers in
order. The bunch of azaleas must be in a vase to the left of begonias,
and the bunch of begonias must be in a vase to the left of carnations.
If there are more vases than bunches of flowers then the excess will be
left empty. A vase can hold only one bunch of flowers.
Each vase has a distinct characteristic (just like
flowers do). Hence, putting a bunch of flowers in a vase results in a
certain aesthetic value, expressed by an integer. The aesthetic values
are presented in a table as shown below. Leaving a vase empty has an
aesthetic value of 0.
|
V A S E S |
||||||
|
1 |
2 |
3 |
4 |
5 |
||
|
Bunches |
1 (azaleas) |
7 |
23 |
-5 |
-24 |
16 |
|
2 (begonias) |
5 |
21 |
-4 |
10 |
23 |
|
|
3 (carnations) |
-21 |
5 |
-4 |
-20 |
20 |
|
According to the table, azaleas, for example, would look great in vase 2, but they would look awful in vase 4.
To achieve the most pleasant effect you have to
maximize the sum of aesthetic values for the arrangement while keeping
the required ordering of the flowers. If more than one arrangement has
the maximal sum value, any one of them will be acceptable. You have to
produce exactly one arrangement.
ASSUMPTIONS
- 1 ≤ F ≤ 100 where F is the number of the bunches of flowers. The bunches are numbered 1 through F.
- F ≤ V ≤ 100 where V is the number of vases.
- -50 £
Aij £
50 where Aij is the aesthetic value obtained by putting the flower bunch i into the vase j.
Input
- The first line contains two numbers: F, V.
- The following F lines: Each of these lines contains V integers, so that Aij is given as the j’th number on the (i+1)’st line of the input file.
Output
- The first line will contain the sum of aesthetic values for your arrangement.
- The second line must present the arrangement as a list of F numbers, so that the k’th number on this line identifies the vase in which the bunch k is put.
Sample Input
3 5
7 23 -5 -24 16
5 21 -4 10 23
-21 5 -4 -20 20
Sample Output
53
2 4 5 水dp,设dp[i][j]为当前第i种朵花放入第j个花瓶的最大价值,mx[i][j] 为 max(dp[i][k]) ( 1=<k<=j)
则状态方程为 dp[i][j] = a[i][j] + mx[i - 1][j - 1];
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring> using namespace std; #define maxn 105 #define INF 100 int dp[maxn],mx[maxn],a[maxn][maxn],mxid[maxn],fa[maxn][maxn];
int ans[maxn];
int f,v,len = ; void solve() { for(int i = ; i <= f; i++) {
for(int j = i; j <= v; j++) {
dp[j] = a[i][j] + (j == ? : mx[j - ]);
fa[i][j] = j == ? : mxid[j - ];
}
for(int j = i; j <= v; j++) {
mx[j] = mx[j - ];
mxid[j] = mxid[j - ];
if(mx[j] < dp[j] || j == i) {
mx[j] = dp[j];
mxid[j] = j;
}
}
/*for(int j = 1; j <= v; j++) {
printf("%d ",mxid[j]);
}
printf("\n");*/
} } void output() {
int id = f,_max = dp[f];
for(int i = f + ; i <= v; i++) {
if(_max < dp[i]) {
_max = dp[i];
id = i;
}
} printf("%d\n",dp[id]);
len = f;
for(int u = id; len >= ; u = fa[len + ][u]) {
ans[len--] = u;
} printf("%d",ans[]);
for(int i = ; i <= f; i++) {
printf(" %d",ans[i]);
}
printf("\n");
} int main()
{
// freopen("sw.in","r",stdin); scanf("%d%d",&f,&v); for(int i = ; i <= f; i++) {
for(int j = ; j <= v; j++) {
scanf("%d",&a[i][j]);
}
} solve(); output(); //cout << "Hello world!" << endl;
return ;
}
SGU 104的更多相关文章
- sgu 104 Little shop of flowers 解题报告及测试数据
104. Little shop of flowers time limit per test: 0.25 sec. memory limit per test: 4096 KB 问题: 你想要将你的 ...
- SGU 104. Little shop of flowers (DP)
104. Little shop of flowers time limit per test: 0.25 sec. memory limit per test: 4096 KB PROBLEM Yo ...
- SGU 104 Little shop of flowers【DP】
浪(吃)了一天,水道题冷静冷静.... 题目链接: http://acm.sgu.ru/problem.php?contest=0&problem=104 题意: 给定每朵花放在每个花盆的值, ...
- 动态规划(方案还原):SGU 104 Little shop of flowers
花店橱窗布置问题 时间限制:3000 ms 问题描述(Problem) 假设你想以最美观的方式布置花店的橱窗,你有F束花,每束花的品种都不一样,同时,你至少有同样数量的花瓶,被按顺序摆成一行.花 ...
- 【SGU 104】Little shop of flowers
题意 每个花按序号顺序放到窗口,不同窗口可有不同观赏值,所有花都要放上去,求最大观赏值和花的位置. 分析 dp,dp[i][j]表示前i朵花最后一朵在j位置的最大总观赏值. dp[i][j]=max( ...
- sgu 104 Little Shop of Flowers
经典dp问题,花店橱窗布置,不再多说,上代码 #include <cstdio> #include <cstring> #include <iostream> #i ...
- Little shop of flowers - SGU 104 (DP)
题目大意:把 M 朵花插入 N 个花瓶中,每个花插入不同的花瓶都有一个价值A[Mi][Nj],要使所有的花都插入花瓶,求出来最大的总价值(花瓶为空时价值是0). 分析:dp[i][j]表示前i朵花插入 ...
- SGU刷题之路开启
VJ小组:SGU---48h/题 每道做出的题目写成题解,将传送门更新在这里. SGU:101 - 200 SGU - 107 水题 解题报告 SGU - 105 找规律水题 解题报告 SGU - 1 ...
- SGU 乱搞日志
SGU 100 A+B :太神不会 SGU 101 Domino: 题目大意:有N张骨牌,两张骨牌有两面有0到6的数字,能相连当且仅当前后数字相同,问能否有将N张骨牌连接的方案?思路:裸的欧拉回路,注 ...
随机推荐
- 学习KMP算法
int kmp(char * t,int lenT,char * pat,int lenPat){ ,posT=; int[] f=partialMatch(pat,lenPat)//获取pat字符串 ...
- SQLserver中idendity的妙用
假设:现在有产品信息需要入库,要给每个产品按找预定的规则进行编号,编号规则如下: 产品编码:6位产品类型码+1位仓库码+2位年份+5位顺序码(要求从00001开始自增) 6位产品类型码:P00001 ...
- ios多线程和进程的区别(转载)
很想写点关于多进程和多线程的东西,我确实很爱他们.但是每每想动手写点关于他们的东西,却总是求全心理作祟,始终动不了手. 今天终于下了决心,写点东西,以后可以再修修补补也无妨. 一.为何需要多进程(或者 ...
- 如何查看hadoop与hbase的版本匹配关系
官网:http://hbase.apache.org/book.html 搜索:Hadoop version support matrix 下面有一个二维的支持关系表.
- winform 表单正则表达式验证 示例(ValidationRule)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 安装MSITVPN连接的时候弹出:需要(未知)上的文件'MSITVPN.bmp。
使用 msitvpn 连接microsoft 公司内网,在安装msitvpn的时候突然弹出一个对话框提示需要msitvpn.bmp 文件,找了很久都没找到解决问题方案. 最后只能猜测是不是和用户的权限 ...
- homework-03 扑街。。
1.思路 我的思路是利用进程间通信间来实现题目要求. 第一次打开的程序与第二次打开的程序并不是同一个进程,故需要进程间通信来是传递信息. windows下进程间通信的方式有很多,如文件映射.共享内存. ...
- ABAP字符串按长度拆分
REPORT ytest_012 MESSAGE-ID oo. ) TYPE c. ) TYPE c. ) TYPE c. DATA: l_pos TYPE i. DATA: BEGIN OF ls_ ...
- 向Array中添加冒泡排序
冒泡排序思想 通过在无序区的相邻元素的比较和替换,使较小的元素浮到最上面. 冒泡排序实现 Function.prototype.method = function(name, func){ this. ...
- 【Binary Tree Post order Traversal】cpp
题目: Given a binary tree, return the postorder traversal of its nodes' values. For example:Given bina ...