sgu 104 Little shop of flowers 解题报告及测试数据
104. Little shop of flowers
time limit per test: 0.25 sec.
memory limit per test: 4096 KB
问题:
你想要将你的花窗安排得最具美感。有F束花,每一束花都不一样,至少有F个按顺序排成一行的花瓶。花瓶从左到右,依次编号1-V。而花放置的位置是可以改变的,花依次编号1到F。花的序号有一个特征,即是序号决定了花束出现在花瓶里的顺序。例如,有两束花编号i和j,满足i<j,那么i所在的花瓶一定要在j所在花瓶的左边,即是i所在花瓶序号小于j的。每一束花都只能且必须插在一个花瓶中,一个花瓶只能插一朵花,如果花瓶的个数大于花束的个数,那么将会出现空的花瓶。
每个花瓶都有一个严格的特征值。某一束花放置在某一个花瓶中有一个确定的美学价值,用整数表示。空花瓶的美学价值为1。如下表所示。
|
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 |
|
根据上表,例如,杜鹃花放在花瓶2中具有最大的美学价值,放在花瓶4中美学价值最低。为了使花店的美学价值最大,你需要计算出按照花的顺序将花放置在花瓶中后的最大美学价值。如果可以产生最大美学价值的放置方式不只一种,那么任何一种都是可以的,你只需要设计出一种可以了。
假设:
- 1 ≤ F ≤ 100 ,F是花的数量,依次编号1到F
- F ≤ V ≤ 100 ,V 是花瓶的数量。
- -50 £ Aij £ 50 ,Aij是将花束i放置在花瓶j的美学价值。
输入:
- 第一行包含两个值,F和V。
- 接下来的F 行,每一行包含V个整数,因此Aij的值就是输入文件中第i+1行的第j个数字。
输出
- 第一行包含按照你的方案计算出的美学价值。
第二行包含F个整数,第k个数代表放置第k束花的花瓶的编号。
示例输入:
3 5
7 23 -5 -24 16
5 21 -4 10 23
-21 5 -4 -20 20
示例输出
53
2 4 5
来源: <http://acm.sgu.ru/problem.php?contest=0&problem=104>
题解:
因为花瓶放置必须按照顺序,就是说放第i个花瓶的位置一定与之前i-1个花瓶的状态有关,所以就想到了动态规划。
所有的花都必须放置在花瓶中,所以考虑第i束花应从第i个花瓶开始。状态转移方程即是 dp[i][j] = max(dp[i-1][j-1]+a[i][j],dp[i][j-1]) ,前者代表第i束花放在第j个花瓶中,后者代表将第j个花瓶空置。
路径的记录。使用二维数组 tag[N][N],将更新的位置置为1,将空置的位置置为0。那么从后往前遍历找到最后更新的值的位置就是花放置的位置。
以下是代码:
#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std; #define ss(x) scanf("%d",&x)
#define ff(i,st,ed) for(int i=st;i<ed;i++)
#define fe(i,st,ed) for(int i=st;i<=ed;i++)
#define s64(x) scanf("%I64d",&x)
#define print(x) printf("%d\n",x)
#define write() freopen("1.in","r",stdin)
typedef long long LL; const int N = 105;
const int INF = 10000000;
int a[N][N];
int dp[N][N],tag[N][N];
int F,V;
void init(){
ss(F);ss(V);
fe(i,1,F)fe(j,1,V)
ss(a[i][j]);
ff(i,0,N)ff(j,0,N){
dp[i][j]=-INF;
tag[i][j]=0;
}
}
void solve(){
fe(i,0,F)
fe(j,i,V){ //第二层循环从i开始
if(dp[i-1][j-1]+a[i][j]>dp[i][j-1]){
tag[i][j]=1;
dp[i][j]= dp[i-1][j-1]+a[i][j];
}else dp[i][j]=dp[i][j-1]; //状态转移方程
}
print(dp[F][V]);
int k = F,path[N];
//从后往前遍历,寻找最后更新位置
for(int i = V;i>=1;i--)
if(tag[k][i] && k >=1)path[k--]=i;
fe(i,1,F)printf("%d ", path[i]);//输出
}
int main(){
//write();
init();
solve();
}
sgu 104 Little shop of flowers 解题报告及测试数据的更多相关文章
- 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问题,花店橱窗布置,不再多说,上代码 #include <cstdio> #include <cstring> #include <iostream> #i ...
- 【LeetCode】605. Can Place Flowers 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 解题方法 贪婪算法 日期 题目地址:https://leetcode.c ...
- CF451E Devu and Flowers 解题报告
CF451E Devu and Flowers 题意: \(Devu\)有\(N\)个盒子,第\(i\)个盒子中有\(c_i\)枝花.同一个盒子内的花颜色相同,不同盒子的花颜色不同.\(Devu\)要 ...
- codeforces 459 B.Pashmak and Flowers 解题报告
题目链接:http://codeforces.com/problemset/problem/459/B 题目意思:有 n 朵 flowers,每朵flower有相应的 beauty,求出最大的beau ...
- codeforces 474D.Flowers 解题报告
题目链接:http://codeforces.com/problemset/problem/474/D 题目意思:Marmot 吃两种类型的花(实在难以置信呀--):red 或者 white,如果要吃 ...
- sgu 103 Traffic Lights 解题报告及测试数据
103. Traffic Lights Time limit per test: 0.25 second(s) Memory limit: 4096 kilobytes 题解: 1.其实就是求两点间的 ...
随机推荐
- Android学习笔记之ConnectivityManager+NetWorkInfo
PS:眼看就要开学了,该收收心了. 学习内容: 1.ConnecivityManager 2.NetWorkInfo ConnectivityManger:网络连接管理者,用于管理Android设 ...
- 用eclipse加载别人的工程,报错Target runtime com.genuitec.runtime.generic.jee60 is not defined
系统加载工程后,报错Target runtime com.genuitec.runtime.generic.jee60 is not defined,在发布工程的同事电脑上正常 新导入的工程,出问题很 ...
- Asp.Net 三层架构之泛型应用
一说到三层架构,我想大家都了解,这里就简单说下,Asp.Net三层架构一般包含:UI层.DAL层.BLL层,其中每层由Model实体类来传递,所以Model也算是三层架构之一了,例外为了数据库的迁移或 ...
- WCF开发框架之插件化应用模式升级
自从在<Winform开发框架之插件化应用框架实现>一文中,介绍并总结了Winform开发框架插件化应用框架的实现后,赢得了很多同行和客户的支持,于是把我的WCF开发框架.混合式开发框架都 ...
- 2015年最热门前端框架React 入门实例教程
现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Native 发布,结果一天之内,就获得了 5000 颗星,受瞩目程度可见一斑. React 起源于 Face ...
- Chrome弹窗的简单应用(选择结构与循环结构)
★选择结构★ ★JS实现弹窗显示随机数 示例代码效果图 ★ 弹窗实现对随机数的进一步判断 示例代码效果图 ★综合应用 比较大小 ★ 判断成绩等级 ): : : : : alert(" ...
- Identity标识列
SQL Server中,经常会用到Identity标识列,这种自增长的字段操作起来的确是比较方便.但它有时还会带来一些麻烦. 示例一 :当表中被删除了某些数据的时候,自增长列的编号就不再是一个连线的数 ...
- Python基础:序列(列表、元组)
一.概述 列表(list)是由一个个 Python对象 组成的序列.其中,Python对象 可以是任何类型的对象,包括 Python标准类型(数值.字符串.列表.元组和字典)以及 用户自定义类型(类) ...
- Discuz API的延伸
作为社交平台来使用Discuz的话,UC_Server提供的那些数据接口是不够用的,我们还需要访问及操作用户的扩展数据. 基于UXF框架的rest_controller,很容易就可以实现API接口. ...
- [PHP] 命令行执行整合pathinfo模拟定时任务
命令行模式下,根据传参,调用不同控制器.控制器中根据配置定时执行指定方法 Application.php <?php class Application{ public static funct ...