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!

 

posted on 2014-09-15 10:33  深蓝无忌  阅读(126)  评论(0编辑  收藏  举报

导航