转载请注明出处:優YoU  http://user.qzone.qq.com/289065406/blog/1300164274

大致题意:

给出几类珍珠,以及它们的单价,要求用最少的钱就可以买到相同数量的,相同(或更高)质量的珍珠。

【规定买任一类的珍珠n个(价格为p),都要支付(n+10)*p的钱,即额外支付10*p】

例如样例Input的第二个例子:

3

1 10

1 11

100 12

需要买第一类1个,第二类1个,第三类100个

按常规支付为 (1+10)*10 + (1+10)*11 + (100+10)*12 = 1551元(一共买了102个珍珠)

但是如果全部都按照第三类珍珠的价格支付,同样是买102个,而且其中总体质量还被提高了,但是价格却下降了:(102+10)*12 = 1344元

而对于样例Input的第一个例子:

2

100 1

100 2

按常规支付为 (100+10)*1 + (100+10)*2 =330元

但是全部按第二类珍珠的价格支付,同样买200个,虽然总体质量提升了,但是价格也提高了: (202+10)*2=424元

本题关键点在于:

(1)       要求要买的珍珠的数量是一定的

(2)       所买的珍珠的质量允许提高,但不允许下降(即可以用高质量珍珠替代低质量)

(3)       输入时,后输入的珍珠价格一定比前面输入的要贵

(4)       由(2)(3)知,珍珠的替代必须是连续的,不能跳跃替代(这个不难证明,因为假如用第i+2类去替代第i类珍珠,会使最终的支付价格降低,那么用第i+1类去替代第i类珍珠会使最终的支付价格更加低)

根据这4个约束条件,那么购买珍珠的方案为:

在珍珠类型的总区间[1,c]中划分多个子区间,其中在闭区间i1~j1的珍珠全部按第j1类珍珠的价格p1支付,在闭区间i2~j2的珍珠全部按第j2类珍珠的价格p2支付,…在闭区间in~jn的珍珠全部按第jn类珍珠的价格pn支付。 这些区间互不相交。

其余珍珠按其原价支付。

要求找出最优的划分方案,使得最终支付价格最低。

令dp[i]表示在已知第i类珍珠时,所需支付的最低价格

则状态方程为:

dp[i]=(a[i]+10)*p[i]+dp[i-1];  //当第i种珍珠出现时,未优化价格的情况

dp[i]=min(dp[i],(sum[i]-sum[j]+10)*p[i]+dp[j]);  //枚举j,价格优化

 

dp[0]=0;  //Dp初始化

 1 //Memory Time  2 //220K   0MS  3  4 #include<iostream> 5 using namespace std; 6  7 int min(int a,int b) 8 { 9     return a<b?a:b;10 }11 12 int main(int i,int j)13 {14     int test;15     cin>>test;16     while(test--)17     {18         /*Input & Initial*/19 20         int c;21         cin>>c;22 23         int* a=new int[c+1];  //某类珍珠数目24         int* p=new int[c+1];  //某类珍珠单价25         int* dp=new int[c+1]; //dp[i]表示在已知第i类珍珠时,所需支付的最低价格26         int* sum=new int[c+1];//sum[i]=∑a[i]27 28         sum[0]=0;29         for(i=1;i<=c;i++)30         {31             cin>>a[i]>>p[i];32             sum[i]=sum[i-1]+a[i];33         }34 35         /*Dp*/36 37         dp[0]=0;  //Dp初始化38         for(i=1;i<=c;i++)39         {40             dp[i]=(a[i]+10)*p[i]+dp[i-1];   //当第i种珍珠出现时,未优化价格的情况41             for(j=0;j<i;j++)  //枚举第i种珍珠前的每一种珍珠,寻找最优价格42                 dp[i]=min(dp[i],dp[j]+(sum[i]-sum[j]+10)*p[i]);  //在求dp[i]前,对于每一个j<i,dp[j]的最优值已求出43         }                                                        //(sum[i]-sum[j]+10)*p[i]即第j+1~i种珍珠被第i种珍珠替代后的价格44         cout<<dp[c]<<endl;45 46         delete a,p,dp,sum;47     }48     return 0;49 }

转载于:https://www.cnblogs.com/lyy289065406/archive/2011/07/31/2122652.html

POJ1260-Pearls相关推荐

  1. POJ-1260 Pearls DP

    题目链接:http://poj.org/problem?id=1260 基本DP,只要证明最优解中不会有交叉替换,得出转移方程:f[i]=min{f[j]+(a[j+1]+..+a[i]+10)*p[ ...

  2. AC日记——Paint Pearls hdu 5009

    Paint Pearls 思路: 离散化+dp+剪枝: dp是个n方的做法: 重要就在剪枝: 如果一个长度为n的区间,有大于根号n种颜色,还不如一个一个涂: 来,上代码: #include <c ...

  3. Pearls POJ - 1260(区间记忆化搜索)

    题意: n件物品,给出数量和价格,(注意数量和价格都是升序给出的这个是能DP的关键),要买掉所以商品 对于每类物品,所需要的价格是(a[i]+10)*p[i] ,即要多买10件,也可以把价格低的物品合 ...

  4. 【HDU - 5009】Paint Pearls(dp,链表优化dp)

    题干: Lee has a string of n pearls. In the beginning, all the pearls have no color. He plans to color ...

  5. 【HDU - 5090】Game with Pearls (匈牙利算法,二分图匹配)

    题干: Tom and Jerry are playing a game with tubes and pearls. The rule of the game is: 1) Tom and Jerr ...

  6. POJ-1260 Pearls---DP

    题目链接: https://cn.vjudge.net/problem/POJ-1260 题目大意: 给定一系列的不同质量项链上的珠宝数量和价格(按质量升序给出,同时价格也升序).可以用价格高的珠宝来 ...

  7. 贪心 HDOJ 5090 Game with Pearls

    题目传送门 1 /* 2 题意:给n, k,然后允许给某一个数加上k的正整数倍,当然可以不加, 3 问你是否可以把这n个数变成1,2,3,...,n, 可以就输出Jerry, 否则输出Tom. 4 贪 ...

  8. 论文解读 Search to Distill: Pearls are Everywhere but not the Eyes,神经网络架构搜索+知识蒸馏

    目录 Search to Distill: Pearls are Everywhere but not the Eyes Motivation Method Experiments 结论 Search ...

  9. AutoML论文笔记(十二)Search to Distill: Pearls are Everywhere but not the Eyes:千里马常有,而伯乐不常有

    文章题目:Search to Distill: Pearls are Everywhere but not the Eyes 链接:link https://arxiv.org/pdf/1911.09 ...

  10. HDU 1300 Pearls(DP)

    题意  珠宝店到珍珠批发商进货  第i种价格为p[i]的珍珠需要n个  则珍珠的结算价格为∑(n+10)*p[i]   由于没种珍珠的数量结算时都要加上10   所以有时候把便宜的珍珠换为贵的结算价格 ...

最新文章

  1. python操作MariaDB
  2. 李兴华html css,2014MLDN(李兴华老师视频教程)
  3. 用javascript 禁止右键,禁止复制,禁止粘贴
  4. mysql创建新用户并分配数据库权限
  5. 修改段落内容_英文论文修改技巧大全
  6. PHP-fpm的master进程杀死work还能处理任务吗
  7. self-利用self在类封装的方法中输出对象属性
  8. 当我们在聊监控,我们在聊什么?
  9. 基于ZKWeb + Angular 4.0的开源管理后台Demo
  10. 计算机网络 --- 数据链路层介质访问控制
  11. Oracle11g最佳培训高清下载版(王二暖Oracle11g教室\10年经验毫无保留)
  12. html怎么让form弄成一个表,创建一个HTML表,其中每个TR是一个FORM
  13. 模拟美萍加密狗--Rockey2虚拟狗(一)
  14. Linux版awvs破解详细步骤
  15. IROS 2021最新开源!深度学习三维激光雷达动态物体分割
  16. DM8达梦数据库学习总结(上)
  17. 一个QQ用户名/密码钓鱼分析
  18. POI excel行内换行
  19. 鸿蒙系统诞生的背景,为何国产系统发展多年无人问津,华为鸿蒙系统刚一开始就引起轰动...
  20. JavaScript(第五天)—爱创课堂专业前端培训

热门文章

  1. onvif学习笔记3:NTP命令实现的示例
  2. qt connect函数_Qt 串口上位机开发Rice 上位机 学习开发
  3. 【Elasticsearch】如何在生产中执行Elasticsearch的零停机升级
  4. 【kafka】kafka 错误代码解释
  5. 95-40-115-java.util.concurrent-线程-AbstractExecutorService
  6. 【nginx】nginx 反向代理 指令说明
  7. 【Kafka】docker下kafka报错 IOException: Connection to xxx:19093 (id: 1002 rack: null) failed
  8. 【Flink】Could not instantiate the executor. Make sure a planner module is on the classpath
  9. Spring Boot : 资源加载器
  10. AttemptID:attempt_1557891872692_0001_r_000000_0 Timed out after 3600 secs