HDU 1300 Pearls(前缀和+DP)

 

有 n 种珍珠,每种珍珠都有它所需要的数量以及价格,但是每一次购买,都需要再支付 10 颗此种珍珠的价格 

现在有一种方法,可以多种珍珠一起买,总价格为 (10+数量)*最高珍珠的价格,问最便宜是多少

 dp[i] 表示购买到第 i 种珍珠后,所花费的价格最小是多少

p[] 代表价格

dp[i]=min(dp[j]+(sum[j+1~i]+10)* p[i])

其中 j ∈[1,i)

 

const int N=100+5;
 
    int n,m,t;
    int i,j,k;
    int a[N];
    int p[N];
    int dp[N];
    int sum[N];
    
int main()
{
    //IOS;
    rush(){
        sd(n);
        for(i=1;i<=n;i++) sdd(a[i],p[i]);
        for(i=1;i<=n;i++) sum[i]=a[i]+sum[i-1];
        for(i=1;i<=n;i++){
            dp[i]=inf;
            for(j=0;j<=i;j++)
                dp[i]=min(dp[i],dp[j]+(sum[i]-sum[j])*p[i]+10*p[i]);
        }
        pd(dp[n]);
    }
    //PAUSE;
    return 0;
}

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页