码迷,mamicode.com
首页 > 其他好文 > 详细

poj1260题解

时间:2016-04-21 20:17:12      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:

1.题意:有n种珍珠,价格为pi,数量为ai,每种珍珠买的时候数量总数要加10;质量低的可以被质量高的替代;

2.错误思路:从最低的开始计算是否可以被下一个替代,如果可以就把这个的数量加到下一个上,不能则ans+=(ai+10)*pi;

3.这是错误。。的错误 错误,比如

10 10
5  15
10 23

此时,假设我们判断的时候,20*10>15*10我们应该把10加到5上,然后又会发现15需要加到下一个,感觉没什么问题。。但,此时相当于,将第一类用第三类代替,明显不划算,

并且最优应该第一类不换,第二类用第三类换,所以正确解法应该为找到每一个价格所能包含的最优解,比如23可以包含第二类和第三类,不能包含第一类;

4.代码:

 

 1 #include<iostream>
 2 using namespace std;
 3 int min(int a,int b){return a>b?b:a;}
 4 void make()
 5 {
 6     int n, i ,j;
 7     int sum[200],a[200],b[200],dp[200];
 8     sum[0]=0;dp[0]=0;
 9     cin>>n;
10     for (i = 1;i<=n;i++)
11     {
12         cin>>a[i]>>b[i];
13         sum[i]=sum[i-1]+a[i];
14         dp[i]=dp[i-1]+(a[i]+10)*b[i];
15     }
16     for (i=1;i<=n;i++)
17         for (j=0;j<i;j++)
18         dp[i]=min(dp[i],dp[j]+(sum[i]-sum[j]+10)*b[i]);
19     cout<<dp[n]<<endl;
20 }
21 int main()
22 {
23     int t;
24     cin>>t;
25     while(t--) make();
26     return 0;
27 }

 

poj1260题解

标签:

原文地址:http://www.cnblogs.com/dlut-li/p/5418371.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!