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 }