题意:有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; }