fork(1) download
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. struct hired_t
  6. {
  7. int battles, size;
  8.  
  9. hired_t( int s ) : battles( 0 ), size( s ) {}
  10. };
  11.  
  12. struct state_t: vector< hired_t >
  13. {
  14. int cost, encountered, hired;
  15.  
  16. state_t() : cost( 0 ), encountered( 0 ), hired( 0 ) {}
  17.  
  18. bool operator < ( const state_t &s ) const
  19. {
  20. if ( cost != s.cost )
  21. return ( cost < s.cost );
  22.  
  23. if ( hired != s.hired )
  24. return ( hired > s.hired );
  25.  
  26. return encountered > s.encountered;
  27. }
  28.  
  29. void battle( int t )
  30. {
  31. int u; stack< vector::iterator > erased;
  32.  
  33. for( auto it = begin(), iu = end(); it != iu; it++, t -= u, hired -= u )
  34. if ( ( it->size -= ( u = min( t, it->size ) ) ) == 0 || ++(it->battles) == 3 )
  35. hired -= it->size, erased.push( it );
  36.  
  37. while( !erased.empty() )
  38. erase( erased.top() ), erased.pop();
  39. }
  40.  
  41. void hire( int t )
  42. {
  43. emplace_back( t ), hired += t;
  44. }
  45.  
  46. } initial_state;
  47.  
  48. struct states_t: multiset< state_t >
  49. {
  50. int min_cost, N, next; struct group_t { int size, cost; } g, group[ 20 ];
  51.  
  52. states_t(): min_cost( INT_MAX )
  53. {
  54. cin >> N, insert( initial_state );
  55.  
  56. for( int i = 0; i < N; i++ )
  57. cin >> group[ i ].size >> group[ i ].cost;
  58. }
  59.  
  60. void goal_state( const state_t &present )
  61. {
  62. if ( present.cost >= min_cost )
  63. return;
  64.  
  65. min_cost = present.cost;
  66. }
  67.  
  68. void candidate_state( const state_t &present )
  69. {
  70. if ( present.cost < min_cost )
  71. insert( present );
  72. }
  73.  
  74. void battle( state_t present )
  75. {
  76. if ( present.encountered < N )
  77. present.battle( g.size ), candidate_state( present );
  78. else
  79. goal_state( present );
  80. }
  81.  
  82. void pass( state_t present )
  83. {
  84. present.cost += g.cost;
  85.  
  86. if ( present.encountered < N )
  87. candidate_state( present );
  88. else
  89. goal_state( present );
  90. }
  91.  
  92. void hire( state_t present )
  93. {
  94. present.cost += 2 * g.cost, present.hire( g.size ), candidate_state( present );
  95. }
  96.  
  97. void iterate()
  98. {
  99. auto it = begin();
  100.  
  101. if ( it->cost >= min_cost )
  102. {
  103. erase( it ); return;
  104. }
  105.  
  106. state_t present( *it ); erase( it ), g = group[ present.encountered++ ];
  107.  
  108. if ( present.hired >= g.size )
  109. battle( present );
  110.  
  111. pass( present );
  112.  
  113. if ( present.encountered < N )
  114. hire( present );
  115. }
  116. };
  117.  
  118. int main()
  119. {
  120. ios_base::sync_with_stdio( false ), cin.tie( nullptr ), cout.tie( nullptr );
  121.  
  122. int T; cin >> T;
  123.  
  124. while( T-- )
  125. {
  126. states_t states;
  127.  
  128. while( !states.empty() )
  129. states.iterate();
  130.  
  131. cout << states.min_cost << '\n';
  132. }
  133. }
Time limit exceeded #stdin #stdout 5s 164504KB
stdin
54
7
2 1
2 1
1 1
1 1
1 1
1 2
2 2
7
10 100
70 5
80 15
20 60
50 90
30 80
10 10
9
600 800
300 400
300 400
1000 400
300 600
100 300
600 300
600 500
1000 300
11
1000 10
700 900
400 500
300 10
900 900
300 10
50 900
50 900
700 900
500 900
50 10
20
846 496
393 637
631 559
35 734
976 619
367 855
288 292
709 659
38 83
465 526
689 837
103 779
40 145
481 429
554 323
478 752
818 871
740 800
781 774
886 756
20
348 453
416 541
528 626
233 210
656 76
144 15
50 41
451 471
485 462
399 562
244 430
481 16
343 327
567 766
71 97
207 418
901 974
311 780
600 543
990 607
20
780 810
655 954
312 712
594 938
445 584
789 133
781 564
941 926
884 520
752 990
579 955
464 596
4 57
29 288
85 494
786 864
655 793
817 966
856 762
903 300
20
124 484
534 604
254 377
416 801
71 139
444 747
666 122
495 207
606 190
507 226
648 376
421 574
746 680
73 819
273 695
329 748
530 862
352 784
590 767
584 12
20
884 845
157 229
23 24
873 535
264 216
999 254
401 308
48 354
902 78
756 650
377 387
416 332
35 464
826 923
92 108
448 327
953 957
555 975
980 780
861 243
20
796 848
719 454
306 144
413 234
721 882
474 332
595 329
513 244
24 35
723 280
745 558
260 867
593 334
538 862
363 753
535 510
952 605
963 609
748 728
842 820
20
892 505
972 863
734 581
799 633
192 2
609 354
469 490
401 280
837 710
609 314
186 26
176 237
281 610
286 672
692 848
656 583
705 980
797 438
560 595
422 103
20
272 373
179 538
594 936
438 748
339 641
517 273
104 785
890 975
353 118
953 611
58 90
404 870
147 485
721 788
392 376
438 664
748 968
553 693
903 990
792 593
20
991 814
279 178
347 57
688 389
815 615
266 446
862 319
157 186
925 105
832 389
533 303
698 448
9 396
773 907
199 323
299 541
137 929
719 835
337 758
576 151
20
430 592
686 532
259 207
749 781
456 806
241 473
380 305
638 842
629 915
624 971
732 711
372 109
562 100
595 718
526 786
721 955
729 759
838 988
317 938
768 124
20
854 777
472 144
280 360
151 272
969 999
615 660
514 278
217 843
339 111
649 150
672 116
165 614
201 53
316 247
766 498
371 971
626 842
466 906
554 968
529 874
20
994 722
949 415
744 286
518 15
235 863
688 357
889 612
264 126
701 498
378 254
729 307
766 393
384 302
232 853
347 808
404 340
881 704
106 624
989 975
990 575
20
667 374
947 257
298 161
940 602
491 178
183 499
738 735
127 469
900 794
581 362
530 28
519 597
933 739
54 685
366 825
292 384
550 590
992 848
750 931
801 592
20
960 228
859 29
806 572
989 487
96 450
833 690
851 490
148 59
588 87
501 220
346 504
684 19
253 261
922 793
251 759
655 562
986 865
942 792
436 930
630 883
20
700 319
910 13
653 65
352 177
63 160
486 298
323 157
495 564
359 93
214 296
101 79
789 587
391 113
39 140
643 402
699 695
720 609
707 724
673 58
901 88
20
996 980
692 97
889 320
199 554
366 838
535 597
296 379
642 618
598 306
475 712
238 448
723 930
139 223
330 459
410 433
791 757
765 834
854 653
154 404
559 871
20
966 853
511 370
100 241
318 581
570 484
718 538
540 31
410 571
1000 728
267 380
999 72
877 776
243 84
949 861
845 845
891 810
698 401
531 797
994 848
377 563
20
894 389
982 432
107 115
894 786
59 519
88 642
355 49
616 643
401 235
400 38
539 238
693 440
617 285
475 251
196 14
487 441
402 468
872 861
935 766
998 993
20
81 101
307 528
611 470
569 458
868 640
790 975
845 525
944 289
235 186
419 547
188 16
477 353
916 705
550 988
812 932
593 892
32 899
419 994
720 987
451 939
20
810 62
547 642
297 183
19 423
95 655
806 853
3 134
154 257
363 284
890 769
479 731
629 521
971 939
55 666
640 887
527 801
300 425
794 949
607 812
371 702
20
359 466
763 173
643 937
168 328
239 469
360 228
600 778
300 433
241 417
488 664
466 435
543 767
460 362
963 811
353 478
612 712
943 726
884 585
662 403
264 901
20
232 326
240 476
897 250
129 87
573 47
781 449
358 159
510 372
727 922
577 507
129 539
742 906
159 57
710 862
668 807
556 899
484 795
727 733
396 207
819 969
20
206 273
545 178
931 305
840 538
233 674
593 568
600 104
673 274
475 713
404 230
70 344
767 558
546 341
788 501
819 646
430 376
918 974
906 849
630 745
738 863
20
853 447
201 53
989 578
350 377
953 778
549 57
662 552
328 25
376 69
506 18
48 680
653 163
398 319
88 121
36 826
639 888
625 839
941 965
768 642
342 721
20
930 950
354 682
396 144
885 627
538 274
511 400
144 435
440 800
481 711
309 275
368 684
484 775
386 343
492 993
40 247
838 969
549 543
650 944
686 886
571 575
20
759 748
266 108
814 618
316 102
179 565
23 54
496 830
273 295
255 280
562 801
534 388
762 195
825 394
528 648
420 805
195 531
552 812
638 365
781 954
819 959
20
508 330
598 359
466 115
480 482
878 797
562 649
105 201
360 485
907 940
269 274
346 507
601 757
800 309
941 877
964 548
697 471
878 647
829 695
761 661
176 990
20
809 402
771 50
385 159
614 505
803 470
768 379
893 234
795 46
141 415
368 291
699 672
333 260
10 596
657 271
648 776
808 808
529 578
857 914
736 470
770 891
20
440 13
623 667
261 195
510 523
238 203
486 458
727 845
593 471
383 200
874 711
892 595
827 925
319 474
387 704
377 885
273 816
249 896
834 861
90 343
735 327
20
663 61
344 20
896 114
576 96
600 570
71 120
294 106
493 230
616 342
484 448
47 295
343 465
371 664
431 973
597 536
267 611
949 963
983 196
76 558
291 675
20
902 488
496 808
969 652
794 789
455 44
910 643
230 455
418 996
162 733
447 740
6 489
476 747
402 942
345 570
673 967
440 926
806 935
733 774
938 879
562 392
20
457 191
398 534
106 559
774 494
221 286
45 88
554 375
75 310
959 391
877 476
207 56
349 364
915 475
715 331
338 902
597 795
445 994
680 902
552 453
396 773
20
729 25
618 528
134 160
358 465
897 963
202 227
124 212
576 400
478 254
514 205
312 551
497 647
137 173
334 253
533 647
619 613
672 588
140 805
747 849
621 996
20
756 79
138 587
546 189
97 272
196 161
427 255
127 974
198 566
734 743
466 220
573 460
767 528
711 662
707 682
876 965
491 632
396 628
570 941
168 667
564 716
20
952 499
834 825
494 188
370 373
848 236
466 170
153 17
285 442
215 119
551 225
406 92
406 349
848 426
483 570
93 387
569 396
237 402
220 731
941 942
455 789
20
447 116
531 653
166 233
233 151
618 336
561 131
900 285
141 212
977 822
691 988
183 348
161 260
583 17
981 999
67 414
874 865
530 756
517 695
988 750
845 957
20
434 37
754 243
785 308
592 983
2 409
858 310
531 432
607 303
655 273
995 56
449 777
815 721
1 883
187 191
204 820
198 637
208 952
879 993
611 823
975 964
20
104 248
98 62
190 154
492 912
651 638
536 95
752 636
525 40
75 4
685 540
160 60
350 497
704 863
473 563
408 490
676 863
738 774
924 927
927 768
190 930
20
860 125
122 174
288 500
666 349
568 544
728 805
613 931
847 938
352 363
430 294
951 392
810 836
894 887
672 790
926 980
956 786
457 429
311 744
928 976
444 847
20
308 216
207 416
306 560
301 548
993 329
747 869
735 749
464 390
863 244
361 157
975 687
502 224
927 476
595 623
255 402
706 914
969 913
329 275
824 982
822 816
20
295 146
930 666
678 233
656 766
682 530
396 430
786 424
643 268
284 565
285 748
572 346
302 317
492 534
794 661
449 421
298 744
566 579
761 596
811 768
713 845
20
661 893
429 230
651 185
376 397
4 965
77 25
46 53
656 365
271 244
185 118
709 429
909 30
241 344
138 483
708 981
204 368
873 984
950 876
168 325
272 523
20
668 541
520 654
980 628
575 235
773 612
971 335
71 16
440 168
4 61
518 226
301 150
557 385
290 424
726 847
255 416
151 922
956 670
575 287
649 501
873 422
20
12 978
880 662
906 483
928 734
717 371
577 172
460 528
548 472
838 829
890 122
930 183
871 459
845 196
195 156
636 848
999 999
825 878
660 730
712 939
815 780
20
725 994
740 70
583 458
990 524
263 250
618 217
911 338
266 306
741 310
745 539
479 926
843 491
585 680
618 925
851 750
611 928
744 702
997 678
512 986
201 126
20
407 138
673 505
145 572
655 867
675 917
389 781
301 242
593 723
443 479
67 331
81 218
655 831
296 372
159 135
480 250
896 886
387 568
743 883
491 397
749 165
20
483 273
159 97
610 301
557 136
993 462
52 638
679 213
478 463
338 111
451 651
778 159
686 517
585 843
306 925
45 731
660 879
356 818
976 965
470 532
452 462
20
347 472
141 365
15 459
136 268
851 803
24 854
856 644
160 68
154 109
897 706
159 224
135 145
536 355
449 475
205 966
751 904
437 891
268 804
702 755
423 552
20
768 426
975 973
472 474
374 45
817 535
498 243
433 410
608 76
299 92
586 456
430 543
826 806
655 889
479 262
217 661
870 985
86 197
957 910
670 683
306 487
20
786 314
827 728
321 554
427 332
620 342
642 536
527 515
401 605
605 987
378 442
872 829
602 91
643 465
190 476
291 328
114 428
993 940
155 665
845 933
997 817
stdout
Standard output is empty