fork(1) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <limits.h>
  4.  
  5. int main(){
  6. int N; // 必要な卵の個数
  7. int S, A; // S個入りパックが A円
  8. int M, B; // M個入りパックが B円
  9. int L, C; // L個入りパックが C円
  10.  
  11. if (scanf("%d", &N) != 1) return 0;
  12. scanf("%d %d", &S, &A);
  13. scanf("%d %d", &M, &B);
  14. scanf("%d %d", &L, &C);
  15.  
  16. // Sパックを i 個買うときの上限 i_max, Mパックを j 個買うときの上限 j_max
  17. int i_max = (N + S - 1) / S;
  18. int j_max = (N + M - 1) / M;
  19.  
  20. int best = INT_MAX;
  21.  
  22. // Sパックと Mパックの組み合わせを全探索
  23. // 残りを Lパックで賄う k を定数時間で算出
  24. for (int i = 0; i <= i_max; i++) {
  25. int eggs_i = i * S;
  26. for (int j = 0; j <= j_max; j++) {
  27. int eggs_ij = eggs_i + j * M;
  28.  
  29. // 必要数に満たない分を Lパックで補う個数 k を計算
  30. int k = 0;
  31. if (eggs_ij < N) {
  32. k = (N - eggs_ij + L - 1) / L;
  33. }
  34.  
  35. int cost = i * A + j * B + k * C;
  36. if (cost < best) {
  37. best = cost;
  38. }
  39. }
  40. }
  41.  
  42. // 最小コストのみ出力
  43. printf("%d\n", best);
  44. return 0;
  45. }
Success #stdin #stdout 0s 5324KB
stdin
20
6 120
8 150
10 180
stdout
360