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张骨牌连接的方案?思路:裸的欧拉回路,注 ...
随机推荐
- MIFARE系列6《射频卡与读写器的通讯》
1. 复位应答(Answer to request) 读写器呼叫磁场内的卡片,卡片对呼叫做出应答.对刚进入磁场得到电复位处于休闲状态的卡片,卡请求(REQA,0x26):对于已进行过读写操作并进入休眠 ...
- java reflect 初始学习 动态加载类
首先要理解Class类: 在java 的反射中,Class.forName("com.lilin.Office") 使用类的全名,这样获取,不仅仅表示了类的类类型,同时还代表着类的 ...
- 纯真IP数据库导入mysql
下载纯真IP数据库 安装后解压到本地为ip.txt 格式为: 1.1.145.0 1.1.147.255 泰国 沙功那空 1.1.148.0 1.1.149.255 ...
- GNU make 总结 (四)
一.执行make程序 make的退出状态: 0 --- 表示执行成功 1 --- 表示执行make时使用了“-q”参数,而且当前工程中存在过时的目标文件 2 --- 执行过程中出现了错误,同时会提示错 ...
- [转]JSON与XML的区别比较
1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许 ...
- C#泛型集合之Dictionary<k, v>使用技巧
1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib) 2.描述 1).从一组键(Key)到一组值(Value) ...
- 硬件描述语言Verilog设计经验总结
一.硬件描述语言Verilog 粗略地看Verilog与C语言有许多相似之处.分号用于结束每个语句,注释符也是相同的(/* ... */和// 都是熟悉的),运算符"=="也用来测 ...
- HTML5-地理定位
HTML5 Geolocation(地理定位)用于定位用户的位置. 定位用户的位置 HTML5 Geolocation API 用于获得用户的地理位置. 鉴于该特性可能侵犯用户的隐私,除非用户同意,否 ...
- 将SQLServer结果导出为excel文件
相信大家常常会遇到将SqlServer查询结果导出到Excel的问题.如果导出的次数少,直接“Save Results As...”就是了:但是当要分别在每个表取样,那就相当麻烦了.今天就为大家提供一 ...
- Sprint会议-初步组织划分
主题:Spring冲刺计划会议,组员已认领方式领取任务,对个人任务进行详细划分. 日期:2015.4.26 地点:学一食堂二楼 与会人员:王雪青.陆宇.徐擎天.张文冬.赵建松 索引表 因早期任务的认领 ...