HDU 1300:Pearls

題目鏈接

/**************************************************************************************
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;
}


發佈了386 篇原創文章 · 獲贊 150 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章