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
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
题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=104
直接进行DP,记录下路径。
dp[i][j] 表示前i个花,放在前j个花瓶得到的最大值。
dp[i][j] 可以由dp[i][j-1] 和 dp[i-1][j-1]转移过来,记录路径就可以了
/* ***********************************************
Author :kuangbin
Created Time :2014-2-7 23:42:44
File Name :E:\2014ACM\SGU\SGU104.cpp
************************************************ */ #include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
const int INF = 0x3f3f3f3f;
int a[][];
int dp[][];
int pre[][];
vector<int>ans;
void solve(int n,int m)
{
if(n == )return;
if(pre[n][m] == )
{
solve(n-,m-);
ans.push_back(m);
}
else if(pre[n][m] == ) solve(n,m-);
} int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n,m;
while(scanf("%d%d",&n,&m) == )
{
for(int i = ;i <= n;i++)
for(int j = ; j <= m;j++)
scanf("%d",&a[i][j]);
for(int i = ;i <= n;i++)
for(int j = ;j <= m;j++)
dp[i][j] = -INF;
for(int i = ;i <= m;i++)
dp[][i] = ;
for(int i = ;i <= n;i++)
for(int j = ;j <= m;j++)
{
int t1 = dp[i-][j-] + a[i][j];
int t2 = dp[i][j-];
if(t1 >= t2)
{
dp[i][j] = t1;
pre[i][j] = ;
}
else
{
dp[i][j] = t2;
pre[i][j] = ;
}
}
printf("%d\n",dp[n][m]);
ans.clear();
solve(n,m);
for(int i = ;i < n;i++)
{
printf("%d",ans[i]);
if(i < n-)printf(" ");
else printf("\n");
}
}
return ;
}
SGU 104. Little shop of flowers (DP)的更多相关文章
- SGU 104 Little shop of flowers【DP】
浪(吃)了一天,水道题冷静冷静.... 题目链接: http://acm.sgu.ru/problem.php?contest=0&problem=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
花店橱窗布置问题 时间限制:3000 ms 问题描述(Problem) 假设你想以最美观的方式布置花店的橱窗,你有F束花,每束花的品种都不一样,同时,你至少有同样数量的花瓶,被按顺序摆成一行.花 ...
- POJ-1157 LITTLE SHOP OF FLOWERS(动态规划)
LITTLE SHOP OF FLOWERS Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 19877 Accepted: 91 ...
- sgu 104 Little Shop of Flowers
经典dp问题,花店橱窗布置,不再多说,上代码 #include <cstdio> #include <cstring> #include <iostream> #i ...
- LightOJ 1033 Generating Palindromes(dp)
LightOJ 1033 Generating Palindromes(dp) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid= ...
- lightOJ 1047 Neighbor House (DP)
lightOJ 1047 Neighbor House (DP) 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=87730# ...
- UVA11125 - Arrange Some Marbles(dp)
UVA11125 - Arrange Some Marbles(dp) option=com_onlinejudge&Itemid=8&category=24&page=sho ...
- 【POJ 3071】 Football(DP)
[POJ 3071] Football(DP) Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4350 Accepted ...
随机推荐
- git的权威指南
CHENYILONG 博客 git的权威指南 全屏 © chenyilong.本站由Postach.io 博客
- shell 检测安装包
检测 wget 是否存在 rpm -q wget >/dev/null ];then echo "install wget,Please wait..." yum -y in ...
- python 的print和特殊方法 __str__和__repr__
先提出一个疑问,为什么print函数可以直接打印参数呢?即使是数字?例如print 1,就会打印1.我们知道1的类型是整型(题外话,在python中1是常量,也是类int的对象,而java中1只是常量 ...
- J - FatMouse's Speed dp
题目链接: https://vjudge.net/contest/68966#problem/J 找最长子串并且记录路径. TLE代码: #include<iostream> #inclu ...
- python內建模块之datetime
from:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143193755 ...
- 利用shell找出15分钟内修改的文件
如果你的文件只是生成不会修改的话,可以这样: find * -mmin -15 2>/dev/null 如果可能修改,则需要这样(先创建一个 15 分之前的时间戳的文件,然后找比这个文件新的文件 ...
- 刘昕鑫 C# 特性详解
C# 特性详解 特性(attribute)是被指定给某一声明的一则附加的声明性信息. 在C#中,有一个小的预定义特性集合.在学习如何建立我们自己的定制特性(custom attributes)之前,我 ...
- 页面嵌入隐藏iframe实现导出功能
<div style="display: none"> <form action="" name="exportExcel" ...
- Demo004 迷宫的生成与遍历的代码审查
1.传送门 合作伙伴: 嚯唶 CnBlogs: 嚯唶 Coding:Rst321 代码: 迷宫的遍历与生成 2. 作业要求 (1). 首先在同学中找一个同伴,范围不限,可以在1~5班中随意组合,建议尽 ...
- vmware提示:此虚拟机似乎正在使用中,无法取得所有权的解决办法
在虚拟机运行时,一次非正常关机.导致虚拟机出现以下错误: 此虚拟机似乎正在使用中. 如果此虚拟机已在使用中,请按“取消”按钮,以免损坏它.如果此虚拟机未使用,请按“取得所有权(&T)”按钮以获 ...