USACO 3.3 Shopping Offers (shopping)
来源:互联网 发布:phpweb接口测试软件 编辑:程序博客网 时间:2024/05/03 09:52
/*Main idearDP problem. Take each offer as a single choise for DP.dp[a1][a2][a3][a4][a5] = min{dp[a1-prodcut_num[i][1]][a2-prodcut_num[i][2]] [a1-prodcut_num[i][3]][a1-prodcut_num[i][4]][a1-prodcut_num[i][5]] + product_num[i][0]}ak - product_num[i][k] >= 0; 1 <= i <= offers_num;boundary conditions: dp[0][0][0][0][0] = 0;dp[a1][a2][a3][a4][a5] denote the least money we cost to buy a1 product 1, a2 product 2 .... a5 product 5;product[i][1] if i >= 1, it denote the number of product 1 in offer i; if i == 0; it denote the reduced priceof offer i;*//*Executing... Test 1: TEST OK [0.000 secs, 3536 KB] Test 2: TEST OK [0.000 secs, 3536 KB] Test 3: TEST OK [0.000 secs, 3536 KB] Test 4: TEST OK [0.011 secs, 3536 KB] Test 5: TEST OK [0.011 secs, 3536 KB] Test 6: TEST OK [0.000 secs, 3536 KB] Test 7: TEST OK [0.000 secs, 3536 KB] Test 8: TEST OK [0.000 secs, 3536 KB] Test 9: TEST OK [0.011 secs, 3536 KB] Test 10: TEST OK [0.022 secs, 3536 KB] Test 11: TEST OK [0.032 secs, 3536 KB] Test 12: TEST OK [0.032 secs, 3536 KB]All tests OK.*//*ID: haolink1PROG: shoppingLANG: C++*///#include <iostream>#include <fstream>#include <cstring>using namespace std;int dp[6][6][6][6][6];int product_num[105][6];int product_code[1000];//product_code[i] denote product i 's code by the order they are encountered;int ori_mark = 0;int buy_num[6];int offers_num = 0;ifstream fin("shopping.in");ofstream cout("shopping.out");inline int Min(int a,int b){ return a <= b ? a : b;}// Easy to code and only compute the necessary element of dp[]..[]; int Memorized_DP(int a1,int a2, int a3,int a4,int a5){ if(dp[a1][a2][a3][a4][a5] != ori_mark) return dp[a1][a2][a3][a4][a5]; int min_price = ori_mark,w1,w2,w3,w4,w5; for(int i = 1; i <= offers_num; i++){ w1 = a1 - product_num[i][1]; w2 = a2 - product_num[i][2]; w3 = a3 - product_num[i][3]; w4 = a4 - product_num[i][4]; w5 = a5 - product_num[i][5]; if(w1 < 0 || w2 < 0 || w3 < 0 || w4 < 0 || w5 < 0) continue; if(dp[w1][w2][w3][w4][w5] == ori_mark) dp[w1][w2][w3][w4][w5] = Memorized_DP(w1,w2,w3,w4,w5); if(min_price > dp[w1][w2][w3][w4][w5]+product_num[i][0]){ min_price = dp[w1][w2][w3][w4][w5]+product_num[i][0]; } } return min_price; }int main(){ //init int s = 0, num = 0, c = 0, k = 0, code = 0, b = 0; fin >> s; for(int i = 1; i <= s; i++){ fin >> num; for(int j = 0; j < num; j++){ fin >> c >> k; if(product_code[c] == 0) product_code[c] = ++code; product_num[i][product_code[c]] = k; } fin >> product_num[i][0]; } fin >> b; offers_num = s + b; //Single product can also be regarded as a offer. for(int i = 1; i <= b; i++){ fin >> c >> k; if(product_code[c] == 0) product_code[c] = ++code; product_num[s+i][product_code[c]] = 1; buy_num[product_code[c]] = k; fin >> product_num[s+i][0]; } //Note give each element of dp[][][][][] a big enough initial value //except dp[0][0][0][0][0], because finally what we want is exactly //a1,a2,a3,a4,a5 for dp[a1][a2][a3][a4][a5]; memset(dp,0xF,sizeof(dp)); ori_mark = dp[0][0][0][0][0]; dp[0][0][0][0][0] = 0; //DP cout << Memorized_DP(buy_num[1],buy_num[2],buy_num[3],buy_num[4],buy_num[5]) << endl; return 0;}
0 0
- USACO 3.3 Shopping Offers (shopping)
- usaco 3.3 Shopping Offers
- usaco Shopping Offers
- USACO Shopping Offers, DP
- USACO Shopping Offers
- usaco Chapter 3 section 3.3 Shopping Offers
- USACO Section 3.3 Shopping Offers - 多重背包
- USACO 3.3 Shopping Offers商店购物
- USACO-Section 3.3-PROB Shopping Offers
- USACO-Section 3.3 Shopping Offers (DP)
- USACO Shopping Offers 解题报告
- Shopping Offers
- Shopping Offers
- Shopping Offers
- Shopping Offers
- 多维完全背包 USACO 3.3.2 Shopping Offers
- USACO section 3.3 Shopping Offers(DP或最短路)
- 【USACO题库】3.3.2 Shopping Offers商店购物
- ORACLE日期时间函数、字符串函数等
- 新博客 http://laike9m.com
- SQL Server 2008 R2 常见错误总结
- 在页面中使用属性头像(Profile Picture)宏
- Android源码研究的准备工作 -- 下载android源码到Ubuntu上(亲自调试,不能过分迷信GOOGLE文档)
- USACO 3.3 Shopping Offers (shopping)
- 【C语言】05-printf和scanf函数
- 安卓Connection to http://192.168.1.104 refused
- BZOJ1801: [Ahoi2009]chess 中国象棋
- LinuxGPIO驱动使用其实很简单
- 百度/360/腾讯主页
- 《JAVA与模式》之观察者模式
- 数据库模式
- HDU2076