您的位置:首页 > 其它

poj1260 —— 最少的钱买完所需珍珠

2013-03-25 10:41 225 查看
c表示有多少种珍珠

ai 表示第i种珍珠所需的数量

pi 表示第i种珍珠的价钱

每买一种珍珠都需要付额外的10 * pi的钱,便宜的珍珠可以用贵的珍珠来代替,求最少的钱的总数。

简单动态规划

dp[i] 表示买完第i种珍珠之后,所花费的最少的代价,j从0到i,从j+1开始,全部由第i种代替所需的价钱+前j种所需的价钱的最小值

dp[i] = min(dp[j] + (a[j+1]+a[j+2] + ... +a[i]+10)*p[i]) 

#include<iostream>
using namespace std;
int main()
{
int T;
cin >> T;
while(T--)
{
int C;
cin >> C;
int a[1010],p[1010];
int dp[1010];
for(int i=1;i<=C;i++)
cin >> a[i] >> p[i];
dp[0] = 0;

for(int i=1;i<=C;i++)
{
dp[i] = 99999999;
for(int j=0; j<=i-1; j++){
int temp = 0;
for(int k=j+1; k<=i; k++)
temp += a[k];
int sum = (temp + 10) * p[i] + dp[j];
if(sum < dp[i])
dp[i] = sum;
}
}
cout << dp[C] << endl;
}
// system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  DP