您的位置:首页 > 其它

sicily 1073. Pearls

2011-07-21 01:43 183 查看
#include <iostream>            //DP
#include <numeric>
using namespace std;
#define ed 105
int ai[ed],pi[ed],dp[ed];
int main()
{
int t,c;
cin>>t;
while(t--)
{
cin>>c;
for(int i=1;i<=c;++i)
cin>>ai[i]>>pi[i];
fill(dp,dp+ed,100000000);    //初始化为极大值
dp[0]=0;
for(int i=1;i<=c;++i)    //dp[i]表示前i种Pearls的最小费用,dp[c]即为最优解
for(int j=1;j<=i;++j)
dp[i]=min(dp[i],accumulate(&ai[j],&ai[i+1],10)*pi[i]+dp[j-1]);        //accumulate(&ai[j],&ai[i+1],10)返回的是ai[j]+...+ai[i]+10,表示第j...i-1种珍珠都用第i种珍珠代替
cout<<dp[c]<<endl;
}
return 0;
}

//较低等级的珍珠如果要合并到较高等级的珍珠,应该是全部被合并这一等级上,而不能被拆成几部分再合并到不同等级上
//用较高等级的珍珠代替较低等级的珍珠必须是连续代替,比如价格200的等级要替代价格100的等级,
//那么不能跳跃中间的等级,所以应是100及以上的等级(100<p<200)都要被价格200的等级所替代


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: