hdu 1300
地址:http://acm.hdu.edu.cn/showproblem.php?pid=1300
题意:买珠宝。每种品种必须加上10个同等级珠宝的价钱,可以将低品种的并入高品种,这样可能可以减少价钱。求最小价钱。
mark:dp。刚开始思路是小品种的往大品种上加,直到加不了。然后大部分数据可以过,不过显然是wa的。后来看解题报告用新思路做,数据设小了。。wa了。
代码:
#include <stdio.h> int min(int a, int b) {return a < b ? a : b;} int main() { int dp[110], a[110][2]; int t, n, sum1, sum2; int i, j, k; scanf("%d", &t); while(t-- && scanf("%d", &n)) { for(i = 1; i <= n; i++) scanf("%d%d", &a[i][0], &a[i][1]); dp[0] = 0; dp[1] = (a[1][0]+10)*a[1][1]; for(i = 2; i <= n; i++) { dp[i] = 100000000; for(j = 1; j <= i; j++) { sum1 = a[j][0]; for(k = j+1; k <= i; k++) sum1 += a[k][0]; dp[i] = min(dp[i], (sum1+10)*a[i][1]+dp[j-1]); } } printf("%d\n", dp[n]); } return 0; }