poj1260题解

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

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

3.这是错误。。的错误 错误,好比code

10 10
5  15
10 23
blog

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

而且最优应该第一类不换,第二类用第三类换,因此正确解法应该为找到每个价格所能包含的最优解,好比23能够包含第二类和第三类,不能包含第一类;io

4.代码:class

 

 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 }
相关文章
相关标签/搜索