USACO 3.3 Shopping Offers(DP)

和POJ上一个题一模一样,把输入顺序变了,改一点就行。

 1 /*
 2        ID: cuizhe
 3        LANG: C++
 4        TASK: shopping
 5 */
 6 #include <cstdio>
 7 #include <cstring>
 8 #include <cmath>
 9 #include <queue>
10 #include <map>
11 using namespace std;
12 int p[6],o[6],kk[1001];
13 int cl[3001][6],vl[3001];
14 int q[6][6][6][6][6];
15 int main()
16 {
17     int c,k,v,s,i,j,a,b,n,num = 1;
18     int a1,a2,a3,a4,a5;
19     freopen("shopping.in","r",stdin);
20     freopen("shopping.out","w",stdout);
21     scanf("%d",&s);
22     for(i = 1; i <= s; i ++)
23     {
24         scanf("%d",&j);
25         for(k = 1; k <= j; k ++)
26         {
27             scanf("%d%d",&c,&a);
28             if(!kk[c])
29             kk[c] = num++;
30             cl[i][kk[c]] = a;
31         }
32         scanf("%d",&vl[i]);
33     }
34     n = s;
35     scanf("%d",&b);
36     for(i = 1; i <= b; i ++)
37     {
38         scanf("%d%d%d",&c,&k,&v);
39         if(!kk[c])
40         kk[c] = num++;
41         p[kk[c]] = v;
42         o[kk[c]] = k;
43     }
44     for(a1 = 0; a1 <= o[1]; a1 ++)
45     {
46         for(a2 = 0; a2 <= o[2]; a2 ++)
47         {
48             for(a3 = 0; a3 <= o[3]; a3 ++)
49             {
50                 for(a4 = 0; a4 <= o[4]; a4 ++)
51                 {
52                     for(a5 = 0; a5 <= o[5]; a5 ++)
53                     {
54                         q[a1][a2][a3][a4][a5] = a1*p[1]+a2*p[2]+a3*p[3]+a4*p[4]+a5*p[5];
55                     }
56                 }
57             }
58         }
59     }
60     for(i = 1; i <= n; i ++)
61     {
62         for(a1 = cl[i][1]; a1 <= o[1]; a1 ++)
63         {
64             for(a2 = cl[i][2]; a2 <= o[2]; a2 ++)
65             {
66                 for(a3 = cl[i][3]; a3 <= o[3]; a3 ++)
67                 {
68                     for(a4 = cl[i][4]; a4 <= o[4]; a4 ++)
69                     {
70                         for(a5 = cl[i][5]; a5 <= o[5]; a5 ++)
71                         {
72                             if(q[a1][a2][a3][a4][a5] > q[a1-cl[i][1]][a2-cl[i][2]][a3-cl[i][3]][a4-cl[i][4]][a5-cl[i][5]]+vl[i])
73                                 q[a1][a2][a3][a4][a5] = q[a1-cl[i][1]][a2-cl[i][2]][a3-cl[i][3]][a4-cl[i][4]][a5-cl[i][5]]+vl[i];
74                         }
75                     }
76                 }
77             }
78         }
79     }
80     printf("%d\n",q[o[1]][o[2]][o[3]][o[4]][o[5]]);
81     return 0;
82 }
posted @ 2012-11-23 16:38  Naix_x  阅读(170)  评论(0编辑  收藏  举报