本文主要是介绍【DP】景观美化(Landscaping),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
题目:
农夫约翰最近决定来美化他的花园,他需要运输很多的泥土。花园是由N块花圃组成的。第i块花圃初始的时候有Ai数量的泥土。为了达到美化的目的,必须使得第i块花圃的泥土数量Ai变成Bi。
约翰有三个选择:第一,他可以买一个单位的泥土放进任意花圃中,代价是X;第二,他可以将一个单位的泥土从某一个花圃中除去,代价是Y;第三,他可以将第i块花圃中的一个单位的泥土搬运到第j块花圃中,大家是Z*|i-j|。
问题描述
请帮助约翰计算为了达到目的最小需要花费的代价。
输入
第一行四个整数,分别是N,X,Y,Z。
接下来N行,每行两个整数,分别表示Ai和Bi。
输出
只有一行一个整数,表示最小的代价。
输入样例
4 100 200 1
1 4
2 3
3 2
4 0
输出样例
210
说明
数据范围:1<=N<=100,0<=Ai,Bi<=10,0<=X,Y,Z<=1000。
说明:从第4个花圃中所有的土必须被除去,其中1个单位的土被直接除去,代价是200,剩下3个单位的土从第4个花圃到第1个花圃,
思路
这题我们将每个花圃的泥土都分开来,例如,我们将1,2,3,4的泥土数量分成1,2,2,3,3,3,4,4,4,4。三个3表示第三个花圃中有3个单位的泥土,以此类推。那么我们的题目就变成了经典的动态规划“编辑字符距离”
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
int a[2025]<
这篇关于【DP】景观美化(Landscaping)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!