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 }
相關文章
相關標籤/搜索