usaco Shopping Offers
2011-10-11 22:05
363 查看
这道题想了许久,没有思路,后来参考了网上大牛们的做法!
——竟然是一道DP问题。可叹自己压根就没往这方面想。
第一次写5维DP问题。自己重头看了一遍01背包问题,这才有所领悟。
觉得这道题目有两点很关键:
一、输入数据存储及处理;
二、5维DP问题的理解;
——竟然是一道DP问题。可叹自己压根就没往这方面想。
第一次写5维DP问题。自己重头看了一遍01背包问题,这才有所领悟。
觉得这道题目有两点很关键:
一、输入数据存储及处理;
二、5维DP问题的理解;
/* ID: guo geer PROG: shopping LANG: C++ */ #include<iostream> #include<cstdio> #include<cstring> using namespace std; int item[100][5], code[100][5], num[100], dis[100]; int _item[100][5], _num[100], _dis[100]; int _code[10], pur[10], pri[10]; int dp[6][6][6][6][6]; int main() { freopen("shopping.in", "r", stdin); freopen("shopping.out", "w", stdout); int s; while(scanf("%d",&s)==1) { memset(pur, 0, sizeof(pur)); int n; for(int i=0; i<s; i++) { scanf("%d",&n); num[i] = n; for(int j=0; j<n; j++) { int c,k; scanf("%d%d",&c,&k); code[i][j] = c; item[i][j] = k; } scanf("%d", &dis[i]); } int b; scanf("%d",&b); for(int i=0; i<b; i++) { int c,k,p; scanf("%d%d%d",&c,&k,&p); _code[i] = c; pur[i] = k; pri[i] = p; } memset(_item, 0, sizeof(_item)); int N = 0; for(int i=0; i<s; i++) { bool flag = true; for(int j=0; j<num[i]; j++) { bool isFound = false; for(int k=0; k<b; k++) if(code[i][j] == _code[k]) isFound = true; if(isFound == false) flag = false; } if(flag == false) continue; for(int j=0; j<5; j++) for(int k=0; k<5; k++) if(code[i][k] == _code[j]) _item [j] = item[i][k]; _dis = dis[i]; N ++; } memset(dp, 0, sizeof(dp)); for(int i=0; i<=pur[0]; i++) for(int j=0; j<=pur[1]; j++) for(int k=0; k<=pur[2]; k++) for(int u=0; u<=pur[3]; u++) for(int v=0; v<=pur[4]; v++) { int Min = pri[0]*i+pri[1]*j+pri[2]*k+pri[3]*u+pri[4]*v; for(int x=0; x<N; x++) { if(_item[x][0]>i||_item[x][1]>j||_item[x][2]>k||_item[x][3]>u||_item[x][4]>v) continue; if(dp[i-_item[x][0]][j-_item[x][1]][k-_item[x][2]][u-_item[x][3]][v-_item[x][4]]+_dis[x] < Min) Min = dp[i-_item[x][0]][j-_item[x][1]][k-_item[x][2]][u-_item[x][3]][v-_item[x][4]]+_dis[x]; } dp[i][j][k][u][v] = Min; } printf("%d\n",dp[pur[0]][pur[1]][pur[2]][pur[3]][pur[4]]); } fclose(stdin); fclose(stdout); return 0; }
相关文章推荐
- [USACO3.3.2]Shopping Offers
- USACO-Section3.3 Shopping Offers【完全背包】
- USACO / Shopping Offers (多维背包)
- usaco 3.3 Shopping Offers
- Shopping Offers USACO 3.3 (dp完全背包)
- USACO-Section 3.3-PROB Shopping Offers
- USACO3.3.2 Shopping Offers (shopping)
- USACO Shopping Offers
- USACO 3.3 Shopping Offers(DP)
- USACO Shopping Offers 解题报告
- USACO-Section 3.3 Shopping Offers (DP)
- USACO 3.3 Shopping Offers (shopping)
- usaco Chapter 3 section 3.3 Shopping Offers
- USACO Section 3.3 Shopping Offers - 多重背包
- USACO3.3.2 Shopping Offers (shopping)
- USACO 3.3 Shopping Offers
- USACO Shopping Offers, DP
- 【USACO题库】3.3.2 Shopping Offers商店购物
- usaco shopping offers 解析 and C 语言实现
- USACO section 3.3 Shopping Offers(DP或最短路)