zoukankan      html  css  js  c++  java
  • usaco-3.3-shopping-passed

    典型题,数据多,根据题意组织变量,动态规划,背包,图论。

    /*
    ID: qq104801
    LANG: C++
    TASK: shopping
    */
    
    #include <iostream>
    #include <fstream>
    #include <cstring>
    #include <vector>
    #include <queue>
    #include <stack>
    
    using namespace std;
    
    #define nmax 1000
    #define nmin 6
    
    struct special_offer{
        int n;  //the number of products that are offered
        int c[nmin];  //product code c (1 <= c <= 999) 
        int k[nmin];  //k items (1 <= k <= 5) 
        int p;  //the reduced price (1 <= p <= 9999)
    }of[nmax];
    int offer_num;
    
    int b;        //different kinds of products to be purchased
    int c[nmin];  //product code
    int k[nmin];  //indicates how many items of this product are to be purchased
    int p[nmax];  //the regular price per item
    
    int g[nmax];  //product_id->no.
    int d[nmin][nmin][nmin][nmin][nmin];  //dp array
    
    void solver()
    {
        for(int u=0;u<=5;u++)
            for(int v=0;v<=5;v++)
                for(int w=0;w<=5;w++)
                    for(int x=0;x<=5;x++)
                        for(int y=0;y<=5;y++)
                        {
                            d[u][v][w][x][y]=
                                p[0]*u+p[1]*v+p[2]*w+p[3]*x+p[4]*y;
                        
                            int t[5];
                            for(int s=0;s<offer_num;s++)
                            {
                                memset(t,0,sizeof(t));
                                for(int r=0;r<of[s].n;r++)
                                    if(g[of[s].c[r]]!=-1)
                                        t[g[of[s].c[r]]]=of[s].k[r];                        
    
                                if(u>=t[0]&&v>=t[1]&&w>=t[2]&&x>=t[3]&&y>=t[4])
                                    d[u][v][w][x][y]=min(d[u][v][w][x][y],
                                        d[u-t[0]][v-t[1]][w-t[2]][x-t[3]][y-t[4]]+of[s].p);
                            }
                        }
        cout<<d[k[0]][k[1]][k[2]][k[3]][k[4]]<<endl;
    }
    
    void test()
    {    
        freopen("shopping.in","r",stdin);
        freopen("shopping.out","w",stdout);
        cin>>offer_num;
        //cout<<offer_num;
        for(int i=0;i<offer_num;i++)
        {
            cin>>of[i].n;        
            for(int j=0;j<of[i].n;j++)
                cin>>of[i].c[j]>>of[i].k[j];
            cin>>of[i].p;        
        }
        cin>>b;
        for(int i=0;i<b;i++)
        {
            cin>>c[i]>>k[i]>>p[i];
            g[c[i]]=i;
        }
        solver();
    }
    
    int main () 
    {        
        test();        
        return 0;
    }

    test data:

    USACO Training
    Grader Results     
    9 users online
    ARG/1 CHN/2 PHL/1 TWN/1 USA/4
    
    USER: cn tom [qq104801]
    TASK: shopping
    LANG: C++
    
    Compiling...
    Compile: OK
    
    Executing...
       Test 1: TEST OK [0.005 secs, 3468 KB]
       Test 2: TEST OK [0.005 secs, 3468 KB]
       Test 3: TEST OK [0.003 secs, 3468 KB]
       Test 4: TEST OK [0.005 secs, 3468 KB]
       Test 5: TEST OK [0.008 secs, 3468 KB]
       Test 6: TEST OK [0.008 secs, 3468 KB]
       Test 7: TEST OK [0.016 secs, 3468 KB]
       Test 8: TEST OK [0.022 secs, 3468 KB]
       Test 9: TEST OK [0.024 secs, 3468 KB]
       Test 10: TEST OK [0.032 secs, 3468 KB]
       Test 11: TEST OK [0.054 secs, 3468 KB]
       Test 12: TEST OK [0.019 secs, 3468 KB]
    
    All tests OK.
    
    YOUR PROGRAM ('shopping') WORKED FIRST TIME! That's fantastic -- and a rare thing. Please accept these special automated congratulations.
    
    Here are the test data inputs:
    
    ------- test 1 ----
    0
    1
    3 2 2
    ------- test 2 ----
    2
    1 7 3 5
    2 7 1 8 2 10
    2
    7 3 2
    8 2 5
    ------- test 3 ----
    0
    0
    ------- test 4 ----
    0
    5
    7 5 111
    3 5 222
    2 5 333
    9 5 444
    1 5 555
    ------- test 5 ----
    4
    1 641 1 46
    1 262 2 200
    1 83 3 55
    2 24 1 105 2 205
    5
    641 5 50
    262 5 114
    83 5 21
    24 5 79
    105 5 75
    ------- test 6 ----
    4
    2 81 1 62 1 149
    2 62 1 113 1 147
    2 113 1 34 1 77
    2 81 1 34 1 75
    4
    81 1 27
    62 2 135
    113 3 27
    34 4 56
    ------- test 7 ----
    10
    1 155 2 150
    2 173 1 155 1 177
    1 173 2 212
    2 112 1 155 1 152
    2 112 1 173 1 190
    1 112 2 169
    2 271 1 155 1 165
    2 271 1 173 1 195
    2 271 1 112 1 177
    1 271 2 181
    4
    271 3 103
    112 3 92
    173 3 114
    155 3 87
    ------- test 8 ----
    53
    1 43 1 10
    1 43 2 21
    1 43 3 31
    1 62 1 32
    2 62 1 43 1 43
    2 62 1 43 2 57
    2 62 1 43 3 64
    1 62 2 68
    2 62 2 43 1 82
    2 62 2 43 2 85
    2 62 2 43 3 99
    1 62 3 103
    2 62 3 43 1 107
    2 62 3 43 2 119
    2 62 3 43 3 132
    1 51 1 22
    2 51 1 43 1 33
    2 51 1 43 2 44
    2 51 1 43 3 52
    2 51 1 62 1 55
    3 51 1 62 1 43 1 67
    3 51 1 62 1 43 2 77
    3 51 1 62 1 43 3 84
    2 51 1 62 2 94
    3 51 1 62 2 43 1 103
    3 51 1 62 2 43 2 107
    3 51 1 62 2 43 3 126
    2 51 1 62 3 124
    3 51 1 62 3 43 1 132
    3 51 1 62 3 43 2 152
    1 51 2 41
    2 51 2 43 1 55
    2 51 2 43 2 67
    2 51 2 43 3 77
    2 51 2 62 1 78
    3 51 2 62 1 43 1 87
    3 51 2 62 1 43 2 94
    3 51 2 62 1 43 3 115
    2 51 2 62 2 110
    3 51 2 62 2 43 1 125
    3 51 2 62 2 43 2 138
    2 51 2 62 3 152
    3 51 2 62 3 43 1 151
    1 51 3 62
    2 51 3 43 1 72
    2 51 3 43 2 84
    2 51 3 43 3 92
    2 51 3 62 1 102
    3 51 3 62 1 43 1 104
    3 51 3 62 1 43 2 117
    2 51 3 62 2 127
    3 51 3 62 2 43 1 142
    2 51 3 62 3 158
    3
    51 3 24
    62 3 38
    43 3 12
    ------- test 9 ----
    68
    2 43 2 64 4 767
    2 43 3 64 3 753
    2 43 4 64 2 740
    3 52 1 43 1 64 4 773
    3 52 1 43 2 64 3 823
    3 52 1 43 3 64 2 749
    3 52 1 43 4 64 1 762
    2 52 2 64 4 889
    3 52 2 43 1 64 3 820
    3 52 2 43 2 64 2 854
    3 52 2 43 3 64 1 796
    2 52 2 43 4 783
    2 52 3 64 3 939
    3 52 3 43 1 64 2 916
    3 52 3 43 2 64 1 827
    2 52 3 43 3 806
    2 52 4 64 2 918
    3 52 4 43 1 64 1 917
    2 52 4 43 2 836
    3 21 1 43 1 64 4 758
    3 21 1 43 2 64 3 736
    3 21 1 43 3 64 2 691
    3 21 1 43 4 64 1 647
    3 21 1 52 1 64 4 801
    4 21 1 52 1 43 1 64 3 805
    4 21 1 52 1 43 2 64 2 766
    4 21 1 52 1 43 3 64 1 744
    3 21 1 52 1 43 4 675
    3 21 1 52 2 64 3 840
    4 21 1 52 2 43 1 64 2 782
    4 21 1 52 2 43 2 64 1 805
    3 21 1 52 2 43 3 766
    3 21 1 52 3 64 2 860
    4 21 1 52 3 43 1 64 1 876
    3 21 1 52 3 43 2 781
    3 21 1 52 4 64 1 880
    3 21 1 52 4 43 1 869
    2 21 2 64 4 733
    3 21 2 43 1 64 3 719
    3 21 2 43 2 64 2 689
    3 21 2 43 3 64 1 660
    2 21 2 43 4 661
    3 21 2 52 1 64 3 745
    4 21 2 52 1 43 1 64 2 765
    4 21 2 52 1 43 2 64 1 687
    3 21 2 52 1 43 3 697
    3 21 2 52 2 64 2 801
    4 21 2 52 2 43 1 64 1 728
    3 21 2 52 2 43 2 732
    3 21 2 52 3 64 1 858
    3 21 2 52 3 43 1 765
    2 21 2 52 4 880
    2 21 3 64 3 663
    3 21 3 43 1 64 2 680
    3 21 3 43 2 64 1 622
    2 21 3 43 3 657
    3 21 3 52 1 64 2 748
    4 21 3 52 1 43 1 64 1 686
    3 21 3 52 1 43 2 680
    3 21 3 52 2 64 1 737
    3 21 3 52 2 43 1 724
    2 21 3 52 3 748
    2 21 4 64 2 641
    3 21 4 43 1 64 1 620
    2 21 4 43 2 612
    3 21 4 52 1 64 1 693
    3 21 4 52 1 43 1 634
    2 21 4 52 2 715
    4
    21 4 107
    52 4 183
    43 4 126
    64 4 150
    ------- test 10 ----
    55
    1 55 1 116
    1 55 2 237
    1 55 3 363
    1 64 1 154
    2 64 1 55 1 264
    2 64 1 55 2 385
    1 64 2 315
    2 64 2 55 1 408
    1 64 3 467
    1 23 1 133
    2 23 1 55 1 253
    2 23 1 55 2 360
    2 23 1 64 1 297
    3 23 1 64 1 55 1 420
    2 23 1 64 2 446
    1 23 2 275
    2 23 2 55 1 369
    2 23 2 64 1 406
    1 23 3 404
    1 52 1 93
    2 52 1 55 1 209
    2 52 1 55 2 328
    2 52 1 64 1 247
    3 52 1 64 1 55 1 374
    2 52 1 64 2 386
    2 52 1 23 1 232
    3 52 1 23 1 55 1 361
    3 52 1 23 1 64 1 396
    2 52 1 23 2 355
    1 52 2 199
    2 52 2 55 1 326
    2 52 2 64 1 343
    2 52 2 23 1 319
    1 52 3 295
    1 31 1 102
    2 31 1 55 1 215
    2 31 1 55 2 355
    2 31 1 64 1 259
    3 31 1 64 1 55 1 377
    2 31 1 64 2 425
    2 31 1 23 1 230
    3 31 1 23 1 55 1 361
    3 31 1 23 1 64 1 382
    2 31 1 23 2 358
    2 31 1 52 1 202
    3 31 1 52 1 55 1 310
    3 31 1 52 1 64 1 358
    3 31 1 52 1 23 1 334
    2 31 1 52 2 297
    1 31 2 211
    2 31 2 55 1 339
    2 31 2 64 1 366
    2 31 2 23 1 338
    2 31 2 52 1 302
    1 31 3 320
    5
    31 5 120
    52 5 107
    23 5 148
    64 5 171
    55 5 133
    ------- test 11 ----
    95
    1 25 1 183
    1 25 2 354
    1 25 3 549
    1 25 4 748
    1 25 5 915
    1 94 1 126
    2 94 1 25 1 318
    2 94 1 25 2 463
    2 94 1 25 3 662
    1 94 2 276
    2 94 2 25 1 429
    2 94 2 25 2 602
    1 94 3 401
    2 94 3 25 1 557
    1 94 4 512
    1 94 5 625
    1 63 1 99
    2 63 1 25 1 284
    2 63 1 25 2 462
    2 63 1 25 3 650
    2 63 1 94 1 218
    3 63 1 94 1 25 1 424
    2 63 1 94 2 343
    2 63 1 94 3 490
    1 63 2 207
    2 63 2 25 1 385
    2 63 2 25 2 575
    2 63 2 94 1 327
    2 63 2 94 2 478
    1 63 3 284
    2 63 3 25 1 466
    2 63 3 94 1 448
    1 63 4 405
    1 63 5 517
    1 72 1 159
    2 72 1 25 1 342
    2 72 1 25 2 496
    2 72 1 25 3 704
    2 72 1 94 1 286
    3 72 1 94 1 25 1 489
    2 72 1 94 2 412
    2 72 1 94 3 570
    2 72 1 63 1 277
    3 72 1 63 1 25 1 420
    3 72 1 63 1 94 1 411
    2 72 1 63 2 348
    2 72 1 63 3 438
    1 72 2 315
    2 72 2 25 1 518
    2 72 2 25 2 660
    2 72 2 94 1 450
    2 72 2 94 2 618
    2 72 2 63 1 432
    2 72 2 63 2 537
    1 72 3 472
    2 72 3 25 1 686
    2 72 3 94 1 632
    2 72 3 63 1 605
    1 72 4 688
    1 72 5 805
    1 51 1 190
    2 51 1 25 1 373
    2 51 1 25 2 540
    2 51 1 25 3 727
    2 51 1 94 1 304
    3 51 1 94 1 25 1 477
    2 51 1 94 2 446
    2 51 1 94 3 547
    2 51 1 63 1 278
    3 51 1 63 1 25 1 460
    3 51 1 63 1 94 1 404
    2 51 1 63 2 392
    2 51 1 63 3 473
    2 51 1 72 1 337
    3 51 1 72 1 25 1 551
    3 51 1 72 1 94 1 502
    3 51 1 72 1 63 1 467
    2 51 1 72 2 526
    2 51 1 72 3 643
    1 51 2 380
    2 51 2 25 1 525
    2 51 2 25 2 754
    2 51 2 94 1 490
    2 51 2 94 2 656
    2 51 2 63 1 463
    2 51 2 63 2 549
    2 51 2 72 1 512
    2 51 2 72 2 666
    1 51 3 570
    2 51 3 25 1 700
    2 51 3 94 1 663
    2 51 3 63 1 652
    2 51 3 72 1 728
    1 51 4 711
    1 51 5 889
    5
    51 5 202
    72 5 185
    63 5 110
    94 5 147
    25 5 199
    ------- test 12 ----
    81
    3 73 1 54 1 45 3 1116
    3 73 1 54 2 45 2 1116
    3 73 1 54 3 45 1 1212
    3 73 2 54 1 45 2 1229
    3 73 2 54 2 45 1 1314
    3 73 3 54 1 45 1 1498
    3 82 1 54 1 45 3 996
    3 82 1 54 2 45 2 1157
    3 82 1 54 3 45 1 1234
    3 82 1 73 1 45 3 1082
    4 82 1 73 1 54 1 45 2 1261
    4 82 1 73 1 54 2 45 1 1237
    3 82 1 73 1 54 3 1364
    3 82 1 73 2 45 2 1212
    4 82 1 73 2 54 1 45 1 1385
    3 82 1 73 2 54 2 1520
    3 82 1 73 3 45 1 1428
    3 82 1 73 3 54 1 1614
    3 82 2 54 1 45 2 1107
    3 82 2 54 2 45 1 1260
    3 82 2 73 1 45 2 1220
    4 82 2 73 1 54 1 45 1 1395
    3 82 2 73 1 54 2 1405
    3 82 2 73 2 45 1 1443
    3 82 2 73 2 54 1 1479
    3 82 3 54 1 45 1 1272
    3 82 3 73 1 45 1 1301
    3 82 3 73 1 54 1 1382
    3 101 1 54 1 45 3 1046
    3 101 1 54 2 45 2 1169
    3 101 1 54 3 45 1 1326
    3 101 1 73 1 45 3 1236
    4 101 1 73 1 54 1 45 2 1285
    4 101 1 73 1 54 2 45 1 1387
    3 101 1 73 1 54 3 1456
    3 101 1 73 2 45 2 1391
    4 101 1 73 2 54 1 45 1 1398
    3 101 1 73 2 54 2 1529
    3 101 1 73 3 45 1 1521
    3 101 1 73 3 54 1 1658
    3 101 1 82 1 45 3 1121
    4 101 1 82 1 54 1 45 2 1291
    4 101 1 82 1 54 2 45 1 1397
    3 101 1 82 1 54 3 1487
    4 101 1 82 1 73 1 45 2 1326
    5 101 1 82 1 73 1 54 1 45 1 1429
    4 101 1 82 1 73 1 54 2 1447
    4 101 1 82 1 73 2 45 1 1522
    4 101 1 82 1 73 2 54 1 1537
    3 101 1 82 1 73 3 1610
    3 101 1 82 2 45 2 1234
    4 101 1 82 2 54 1 45 1 1424
    3 101 1 82 2 54 2 1498
    4 101 1 82 2 73 1 45 1 1359
    4 101 1 82 2 73 1 54 1 1507
    3 101 1 82 2 73 2 1580
    3 101 1 82 3 45 1 1451
    3 101 1 82 3 54 1 1475
    3 101 1 82 3 73 1 1567
    3 101 2 54 1 45 2 1255
    3 101 2 54 2 45 1 1431
    3 101 2 73 1 45 2 1420
    4 101 2 73 1 54 1 45 1 1524
    3 101 2 73 1 54 2 1539
    3 101 2 73 2 45 1 1479
    3 101 2 73 2 54 1 1649
    3 101 2 82 1 45 2 1295
    4 101 2 82 1 54 1 45 1 1457
    3 101 2 82 1 54 2 1525
    4 101 2 82 1 73 1 45 1 1533
    4 101 2 82 1 73 1 54 1 1690
    3 101 2 82 1 73 2 1656
    3 101 2 82 2 45 1 1402
    3 101 2 82 2 54 1 1482
    3 101 2 82 2 73 1 1663
    3 101 3 54 1 45 1 1569
    3 101 3 73 1 45 1 1576
    3 101 3 73 1 54 1 1714
    3 101 3 82 1 45 1 1527
    3 101 3 82 1 54 1 1555
    3 101 3 82 1 73 1 1626
    5
    101 5 406
    82 5 320
    73 5 375
    54 5 291
    45 5 178
    
    Keep up the good work!
    Thanks for your submission!
    /***********************************************

    看书看原版,原汁原味。

    不会英文?没关系,硬着头皮看下去慢慢熟练,才会有真正收获。

    没有原书,也要网上找PDF来看。

    网上的原版资料多了去了,下载东西也到原始下载点去看看。

    你会知其所以然,呵呵。

    ***********************************************/

  • 相关阅读:
    设计模式学习心得5
    HTTP协议 (六) 状态码详解
    HTTP协议 (五) 代理
    HTTP协议 (四) 缓存
    HTTP协议 (三) 压缩
    HTTP协议 (二) 基本认证
    HTTP协议 (一) HTTP协议详解
    java中abstract和interface的區別(轉)
    基于TCP的字符串传输程序
    文件比较
  • 原文地址:https://www.cnblogs.com/dpblue/p/3972342.html
Copyright © 2011-2022 走看看