zoukankan      html  css  js  c++  java
  • poj1260

    给定n类等级的珍珠

    每类的珍珠都有需求的个数ai,和价格pi

    为了防止游客只买1颗珍珠,所以购买ai个珍珠时,要加上10个的价格

    即(ai+10)*pi

    有时,购买高等级的珍珠代替低等级的珍珠时,可能更便宜,

    比如说

    2

    5 5

    100 10 这样的数据

    (5+10)*5 + (100+10)*100 = 1175

    (100+10+5)*10 = 1150

    题目要求我们求最小的花费

    a < b < c < d

    如果b用c替换时,那么d是不可能替换a的,

    用c替换a明显更优,所以只要考虑连续的一段是不是被替换了即可

    dp[i]购买前i类珍珠的最小花费

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

     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <stdlib.h>
     4 #include <algorithm>
     5 #include <iostream>
     6 #include <queue>
     7 #include <stack>
     8 #include <vector>
     9 #include <map>
    10 #include <set>
    11 #include <string>
    12 #include <math.h>
    13 using namespace std;
    14 #pragma warning(disable:4996)
    15 #pragma comment(linker, "/STACK:1024000000,1024000000")
    16 typedef long long LL;                   
    17 const int INF = 1<<30;
    18 /*
    19 a < b < c < d
    20 会不会发生b用c替换,a用d替换呢?
    21 不会,因为pc*a < pd*a
    22 所有如果c没有被d替换,那么c之前的也不会被d替换,
    23 所有只要考虑连续的一段是不是被替换了即可
    24 */
    25 const int N = 1000 + 10;
    26 int a[N], p[N], sum[N];
    27 int dp[N];
    28 int main()
    29 {
    30     int t, n;
    31     scanf("%d", &t);
    32     while (t--)
    33     {
    34         scanf("%d", &n);
    35         for (int i = 1; i <= n; ++i)
    36         {
    37             scanf("%d%d", &a[i], &p[i]);
    38             sum[i] = a[i];
    39             sum[i] += sum[i - 1];
    40         }
    41         
    42         for (int i = 1; i <= n; ++i)
    43         {
    44             dp[i] = INF;
    45             for (int j = 0; j < i; ++j)
    46             {
    47                 dp[i] = min(dp[i],dp[j] + (sum[i] - sum[j] + 10)*p[i]);
    48             }
    49         }
    50         printf("%d
    ", dp[n]);
    51     }
    52     return 0;
    53 }
    View Code
  • 相关阅读:
    数学之道-微积分
    mysql join实现方式
    python pip源配置
    python使用tesseract-ocr完成验证码识别
    Linux和Windows下查看环境变量方法对比
    把大象装进冰箱的N种方法
    mysql 取当前日期对应的周一或周日
    window 安装 Twisted 遇到的问题
    Java泛型
    Android之Adapter用法总结
  • 原文地址:https://www.cnblogs.com/justPassBy/p/4730301.html
Copyright © 2011-2022 走看看