sicily 2502 买珍珠

Description

珍珠市场上有 N( N ≤ 100)种等级的珍珠,每种珍珠的需求数量是 Bi,单位价格是 Pi
不幸的是,这个市场是黑市——购买一种珍珠,需要额外多付10个同种珍珠的钱(如果不购买当然不用)。
针对这种情况,我们可以用高等级的珍珠来代替低等级的珍珠。
举个例子,
需要5个等级1的珠子(单位价格10元)、100个等级2的珠子(单位价格20元)。按照正常情况下购买需要花费 ( 5 +10 ) * 10 + ( 100 + 10 ) * 20 = 2350 元,如果用等级2的珠子代替等级1的珠子,只需要花费 ( 5 + 100 + 10 ) * 20 = 2300 元。
现在的问题是,应该如何购买珍珠才能在满足需求的条件下花费最少。

Input

第一行,一个整数 N,表示珍珠等级总数。
第二行, N个整数,按照等级从低到高描述每种珍珠的需求数量。
第二行, N个整数,按照等级从低到高描述每种珍珠的单位价格。
(当然价格也是递增的)。

Output

一个整数,表示最少花费。

Sample Input

2
5 100
10 20

Sample Output

2300

分析:

题目属于简单DP,需要注意的是本题要对数据进行简单的判断,可以节省编程时间。本题叙述不够充分,其实暗中已经示意高级珍珠的价格高于低级珍珠价格,即珍珠价格由低级到高级递增。略微有些坑,不过WA几次就能推断出来。

代码:

 1 // Problem#: 2502
 2 // Submission#: 1754411
 3 // The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
 4 // URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
 5 // All Copyright reserved by Informatic Lab of Sun Yat-sen University
 6 #include <iostream>
 7 using namespace std;
 8 
 9 int cost[100];
10 int q[100],p[100];
11 
12 inline int min(int a, int b){
13     return a<b?a:b;
14 }
15 
16 
17 int main(){
18     int num,re;
19     cin >> num;
20     for( int i=0 ; i<num ; i++ ){
21     cin >> q[i];
22     if( i>0 ) q[i] += q[i-1];
23     }
24     for( int i=0 ; i<num ; i++ )
25     cin >> p[i];
26     for( int i=0 ; i<num ; i++ ){
27     cost[i] = ( q[i]+10 ) *p[i];
28     for( int j=0 ; j<i ; j++ )
29         cost[i] = min((q[i]-q[j]+10)*p[i]+cost[j],cost[i]);     
30     }
31     cout << cost[num-1] << endl;
32     return 0;
33 }                                 
原文地址:https://www.cnblogs.com/ciel/p/2876745.html