【题目描述】
现在要买若干种价值的珍珠,但买某种珍珠必须多付10颗此种珍珠的价钱,一颗珍珠可以用比它贵的珍珠充数,因此有时候用贵的珍珠来代替便宜的可能更省钱,输入要买的若干种珍珠,在可用高价珍珠充数的条件下,问最少需要花费多少钱.
int d[105][2];
int dp[105][105];
int main()
{
int t, n;
cin>>t;
while (t--) {
cin>>n;
int i, j, k;
for (i = 0; i < n; ++i) {
scanf("%d%d", &d[i][0], &d[i][1]);
}
memset(dp, 0, sizeof(dp));
for (i = 0; i < n; ++i) {
for (j = i; j < n; ++j) {
int sum = 10;
for (k = i; k <= j; ++k)
sum += d[k][0];
dp[i][j] = sum * d[j][1];
}
}
for (i = 0; i < n; ++i) {
for (j = i + 1; j < n; ++j) {
int min = dp[i][j];
for (k = i; k < j; ++k) {
min = MY_MIN(min, dp[i][k] + dp[k + 1][j]);
}
dp[i][j] = min;
}
}
printf("%d\n", dp[0][n - 1]);
}
return 0;
}