/**************************************************************************************
Date: 2018/2/2 21:51
Author: Wen Yaxin
題目簡介:給出N個等級的珍珠需購買的顆數以及每顆珍珠的價格,
但是購買某以等級珍珠的時候,需要額外支付10顆該等級珍珠的
單價,低等級的珍珠可以用更高等級的珍珠替代,求買列表中
的所有珍珠所需的最小花費。列表中珍珠的等級是從小到大的。
解題思路:動態規劃,dp[i]表示買前i種珍珠的最小花費,買
第i種珍珠,需要考慮的是,自己單獨買花的少,還是和更高
等級的合買花的少。
代碼變量含義:
sum :sum[i]前i種珍珠的總數量
price: price[i]第i種珍珠的單價
dp:dp[i],購買前i種珍珠的最小花費
**************************************************************************************/
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
const int maxn = 105;
int sum[maxn],price[maxn],dp[maxn];
int main() {
int T,N;
scanf("%d",&T);
while(T--) {
scanf("%d",&N);
sum[0] = 0;
for(int i = 1; i <= N; i++) {
scanf("%d%d",&sum[i],&price[i]);
sum[i] += sum[i-1];
}
dp[0] = 0;
for(int i = 1; i <= N; i++) {
//考慮第i種珍珠直接買
dp[i] = dp[i-1] + (sum[i]-sum[i-1]+10)*price[i];
//考慮和之前的珍珠合買
for(int j = 0; j < i; j++) {
dp[i] = min(dp[i],dp[j] + (sum[i]-sum[j]+10)*price[i]);
}
}
printf("%d\n",dp[N]);
}
return 0;
}
HDU 1300:Pearls
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.