• POJ 1260 Pearls 简单dp


    1、POJ 1260

    2、链接:http://poj.org/problem?id=1260

    3、总结:不太懂dp,看了题解 http://www.cnblogs.com/lyy289065406/archive/2011/07/31/2122652.html

    题意:珍珠,给出需求,单价,要求用最少的钱就可以买到相同数量的,相同(或更高)质量的珍珠。

    把握题意,1、输入时,后输入的珍珠价格一定比前面输入的要贵。2、用高质量珍珠替代低质量。

    #include<iostream>
    #include<cstring>
    #include<cmath>
    #include<queue>
    #include<algorithm>
    #include<cstdio>
    using namespace std;
    #define min(a,b) a<b?a:b
    #define LL long long
    #define INF 0x3f3f3f3f
    const int N=100100;
    
    int main()
    {
        int cas,c;
        int a[1010],p[1010];
        int sum[1010],dp[1010];     //sum[i]表示前i类和,dp[i]表示到第i类时最优解
        scanf("%d",&cas);
        while(cas--)
        {
            scanf("%d",&c);
            sum[0]=0;
            for(int i=1;i<=c;i++)
            {
                scanf("%d%d",&a[i],&p[i]);
                sum[i]=sum[i-1]+a[i];
            }
    
            dp[0]=0;
            for(int i=1;i<=c;i++)
            {
                dp[i]=dp[i-1]+(a[i]+10)*p[i];   //先赋未优化的初值
                for(int j=0;j<i;j++)
                {
                    dp[i]=min(dp[i],dp[j]+(sum[i]-sum[j]+10)*p[i]); //关键,每次对比优化,dp[j]+(sum[i]-sum[j]+10)*p[i])即区间i分两份,前j是最优解dp[j],j到i则是(sum[i]-sum[j]+10)*p[i])
                }
            }
    
            cout<<dp[c]<<endl;
        }
    
        return 0;
    }
    View Code
  • 相关阅读:
    初识计算机
    前端html css
    mysql高级
    mysql多表查询
    mysql数据库查询
    mysql表关系
    mysql数据类型
    mysql数据库介绍
    异步回调 协程
    GIL-全局解释器锁
  • 原文地址:https://www.cnblogs.com/sbfhy/p/5738753.html
Copyright © 2020-2023  润新知