现在的位置: 首页 > 综合 > 正文

POJ 1260 Pearls DP

2013年08月08日 ⁄ 综合 ⁄ 共 602字 ⁄ 字号 评论关闭

题意:有c个种不同品质的珍珠,若要买某一品质的珍珠必须在你买的数量的基础上,多付10个这种珍珠的价钱,可以用高品质的珍珠代替低品质的,以便节省一些开支。求要买到所有目标珍珠至少要花多少钱(可以用高品质的代替低品质的)。
题解:

#include <iostream>
using namespace std;

#define INF 100000001
#define N 105
int dp[N], num[N], sum[N], cost[N], price[N];

int min ( int a, int b )
{
	return a < b ? a : b;
}

int main()
{
	int t, n, i, j;
	//freopen("a.txt","r",stdin);
	scanf("%d",&t);
	while ( t-- )
	{	
		scanf("%d",&n);
		memset(sum,0,sizeof(sum));

		for ( i = 1; i <= n; i++ )
		{
			scanf("%d%d",num+i,price+i);
			sum[i] = sum[i-1] + num[i];
			cost[i] = ( num[i] + 10 ) * price[i];
			dp[i] = INF;
		}
		
		dp[0] = 0;
		for ( i = 1; i <= n; i++ )
		{
			for ( j = 0; j < i; j++ )
			    dp[i] = min ( dp[i], dp[j] + (sum[i]-sum[j] + 10) * price[i] ); 
		}
		printf("%d\n",dp[n]);
	}
	return 0;
}

抱歉!评论已关闭.