HDU 1114(完全背包)

╰+攻爆jí腚メ 2022-09-20 11:17 283阅读 0赞

题意:给出小猪钱罐空时的重量E,满时的重量F,钱币的种类N,接下来N行,分别为p w,p为钱币价值,w为钱币重量,求钱罐中钱币的最小价值。

  1. #include <cstring>
  2. #include <cstdio>
  3. int cost[509], weight[509];
  4. int dp[10009];
  5. #define MIN(a, b) ((a) > (b) ? (b) : (a))
  6. #define INF 25000009
  7. int main()
  8. {
  9. int T, E, F, N, i, j, V;
  10. scanf("%d", &T);
  11. while (T--)
  12. {
  13. scanf("%d%d%d", &E, &F, &N);
  14. for (i = 0; i < N; ++i)
  15. scanf("%d%d", weight+i, cost+i);
  16. V = F - E;
  17. //memset(dp+1, -1, sizeof(int) * V);
  18. dp[0] = 0;
  19. for (i = 1; i <= V; ++i) dp[i] = INF;
  20. for (i = 0; i < N; ++i)
  21. for (j = cost[i]; j <= V; ++j)
  22. dp[j] = MIN(dp[j], dp[j-cost[i]] + weight[i]);
  23. if (dp[V] == INF)
  24. printf("This is impossible.\n");
  25. else printf("The minimum amount of money in the piggy-bank is %d.\n", dp[V]);
  26. }
  27. return 0;
  28. }

发表评论

表情:
评论列表 (有 0 条评论,283人围观)

还没有评论,来说两句吧...

相关阅读

    相关 HDU 1171(完全背包)

    题意:给一个数n,接下来n行,每行对应一个设备的两个值,第一个为设备的价值,第二个为该设备的数量。如何把所有设备一分为二,求两部分的价值总和尽量接近。   incl