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 }

你可能感兴趣的:(USACO)