2//两个测试用例
2//需要购买两种珠宝
100 1//需要购买的珠宝数量与价值
100 2//
3
1 10
1 11
100 12
低价的珠宝可以被高价的珠宝代替,买每种珠宝都必须多买10件,问最少需要花费多少钱
#include<iostream>
using namespace std;
int dp[111],cunt[111],value[111];
int sum[111];
int main()
{
int cas;
int n;
int i,j;
scanf("%d",&cas);
while(cas--)
{
memset(sum,0,sizeof(sum));
scanf("%d",&n);
sum[0]=0;
for(i=1;i<=n;i++)
{
dp[i]=999999999;
scanf("%d%d",&cunt[i],&value[i]);
sum[i]=sum[i-1]+cunt[i];
}
dp[0]=0;
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
{
int temp=dp[j-1]+(sum[i]-sum[j-1]+10)*value[i];
if(temp<dp[i])
dp[i]=temp;
}
cout<<dp[n]<<endl;
}
return 0;
}
原文地址:http://www.cnblogs.com/zhangdashuai/p/3845034.html