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 }