zoukankan      html  css  js  c++  java
  • hdu 1300 Pearls(DP)

    题意:

    有N种【价格从低到高】珍珠,每种珍珠有一个价格。每种珍珠有一个需要的个数。

    如果你决定买某种珍珠x个,则需要额外多买10个。【防止游客购买少量】

    你可以把低价格的珍珠换成高价格的珍珠,但不允许把高价格的珍珠换成低价格的珍珠。

    问总共最少需要花多少钱。

    思路:

    假设第 i 种珍珠需要X个。可以知道要么这X个用这个价格买,要么就归到更高价格的珍珠里去买。【想想就明白了】

    也就是,有的珍珠0个,有的珍珠好多。也就是某个珍珠种类的前k种珍珠都归到这个珍珠种类去买。

    DP结构出来了。

    dp[i]:前 i 种珍珠,第 i 种珍珠要买若干个所花的最少钱是多少。

    dp[i]=max( dp[i],dp[j]+(sum[i]-sum[j-1]+10)*p[i] )

    代码:

    int n;
    int sum[105], num[105], p[105];
    int dp[105];
    
    
    int main(){
    
        int T;
        cin>>T;
        while(T--){
            scanf("%d",&n);
            sum[0]=0;
            rep(i,1,n){
                scanf("%d%d",&num[i],&p[i]);
                sum[i]=sum[i-1]+num[i];
            }
    
            mem(dp,inf);
    
            dp[0]=0;
            rep(i,1,n){
                rep(j,0,i-1){
                    dp[i]=min( dp[i],dp[j]+(sum[i]-sum[j]+10)*p[i] );
                }
            }
            printf("%d
    ",dp[n]);
        }
    
        return 0;
    }
  • 相关阅读:
    oo第四次作业总结
    oo第三次博客总结
    oo第二次博客总结
    oo第一次博客总结
    leetcode155-最小栈
    leetcode141-环形链表
    leetcode278-第一个错误的版本
    leetcode118-杨辉三角
    LeetCode21-合并两个有序列表
    LeetCode27-移除元素
  • 原文地址:https://www.cnblogs.com/fish7/p/4334682.html
Copyright © 2011-2022 走看看