题目大意:
现有F束不同的花(1 ≤ F ≤ 100)和V瓶固定在架子上排好序的花瓶(F ≤ V ≤ 100),花编号为1 - F,花瓶在架子上从左到右编号为1 - V,编号小的花束必须插在编号大的花束所在瓶子的左边,每个瓶子只能插一束花,会有空瓶子。现不同花插在不同花瓶会有一个美观度,美观度范围为[-50, 50],对于不插花的瓶子美观度为0。
现只有一个测例,测例中给出F和V以及一个F × V的矩阵,表示不同花在不同瓶子中的美观度,现求出一个最优的插花方法,是总体美观度最大。
注释代码:
/*
* Problem ID : POJ 1157 LITTLE SHOP OF FLOWERS
* Author : Lirx.t.Una
* Language : C
* Run Time : 0 ms
* Run Memory : 152 KB
*/
#include <stdio.h>
//美观值的无穷小
//小于100 × -50
#define RINF -5001
//花束的最大数量
#define MAXN 101
#define MAX(x,y) ( (x) > (y) ? (x) : (y) )
//aesthetic value of (i, j)
//第i束花放在第j号花瓶中的美观度
char av[MAXN][MAXN];
//dp[i][j]表示以i号花为右边界且i插在j号花瓶中的序列的最大美观度
//范围为[-5000, 5000],处在short范围内
short dp[MAXN][MAXN];
int
main() {
int f, v;//花数和花瓶数
int i, j, k;//技术变量
int max;//记录最大值的临时变量
scanf("%d%d", &f, &v);
for ( i = 1; i <= f; i++ )
for ( j = 1; j <= v; j++ )
scanf("%d", &av[i][j]);
for ( i = 1; i <= v; i++ )//初始化
//由于1号花之前没有其它花
//因此以1为右边界序列的最大美观度就是av[1][j]
dp[1][i] = (short)av[1][i];
//由于花必须按顺序排列,因此第i号花摆放的花瓶号j一定满足
//j ≥ i
for ( i = 2; i <= f; i++ )
for ( j = i; j <= v; j++ ) {
for ( max = RINF, k = i - 1; k < j; k++ )
//挑出以i - 1为右边界的最大序列
//此时i- 1号花的花瓶的范围一定是[i - 1, j)
//一定是位于j左边的,因为现在就是假设i号花
//插在j号花瓶中
max = MAX( max, dp[i - 1][k] );
dp[i][j] = max + av[i][j];
}
for ( max = RINF, i = f; i <= v; i++ )
max = MAX( max, dp[f][i] );
printf("%d\n", max);
return 0;
}
无注释代码:
#include <stdio.h>
#define RINF -5001
#define MAXN 101
#define MAX(x,y) ( (x) > (y) ? (x) : (y) )
char av[MAXN][MAXN];
short dp[MAXN][MAXN];
int
main() {
int f, v;
int i, j, k;
int max;
scanf("%d%d", &f, &v);
for ( i = 1; i <= f; i++ )
for ( j = 1; j <= v; j++ )
scanf("%d", &av[i][j]);
for ( i = 1; i <= v; i++ )
dp[1][i] = (short)av[1][i];
for ( i = 2; i <= f; i++ )
for ( j = i; j <= v; j++ ) {
for ( max = RINF, k = i - 1; k < j; k++ )
max = MAX( max, dp[i - 1][k] );
dp[i][j] = max + av[i][j];
}
for ( max = RINF, i = f; i <= v; i++ )
max = MAX( max, dp[f][i] );
printf("%d\n", max);
return 0;
}
单词解释:
pleasant:adj, 令人愉悦的,令人舒适的
bunch:n, 花束,串
a bunch of flower:一束花
vase:n, 花瓶
glue:n, 胶水; vt, 粘合
shelf:n, 架子
moveable:adj, 可移动的
significance:n, 意义,重要性
azalea:n, 杜鹃花
begonia:n, 秋海棠
carnation:n, 康乃馨
excess:n, 超过,额外
aesthetic:adj, 美的,美学的
characteristic:n, 特性