1.題意:有n種珍珠,價格爲pi,數量爲ai,每種珍珠買的時候數量總數要加10;質量低的能夠被質量高的替代;ios
2.錯誤思路:從最低的開始計算是否能夠被下一個替代,若是能夠就把這個的數量加到下一個上,不能則ans+=(ai+10)*pi;spa
3.這是錯誤。。的錯誤 錯誤,好比code
10 10
5 15
10 23blog
此時,假設咱們判斷的時候,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 }