最少费用购物.cpp
上传用户:market520
上传日期:2022-01-29
资源大小:1k
文件大小:3k
- // 设计题:
- // 学号:
- // 姓名:ustc
- // 第 3-17 题
- /*
- InPut(优惠前) InPut(优惠后) OutPut
- 2 2 14
- 7 3 2 1 7 3 5
- 8 2 5 2 7 1 8 2 10
- */
- #include<iostream>
- #include<stdio.h>
- using namespace std;
- int b,s; //所购商品种类数b;有s种优惠商品组合
- int product[6], num[100], offer[100][100], cost[7][7][7][7][7];
- struct elem
- {
- int piece; //购买该商品的总数
- int price; //购买该种商品的正常单价
- }purch [100]; //b所购商品的种类数
- void minicost()
- {
- int i, j, k, m, n, p, minm;
- minm = 0;
- for(i=1; i<=b; i++)
- minm += product[i] * purch[i].price;
- for(p=1; p<=s; p++)
- {
- i = product[1] - offer[p][1];
- j = product[2] - offer[p][2];
- k = product[3] - offer[p][3];
- m = product[4] - offer[p][4];
- n = product[5] - offer[p][5];
- if(i>=0 && j>=0 && k>=0 && m>=0 && n>=0 && (cost[i][j][k][m][n]+offer[p][0]<minm))
- minm = cost[i][j][k][m][n]+offer[p][0];
- }
- cost[product[1]][product[2]][product[3]][product[4]][product[5]] = minm;
- }
- //其中,product[i]是购买第i种商品的数量,由comp迭代计算,init进行初始化计算。
- void comp(int i)
- {
- if(i>b) { minicost(); return;}
- for(int j=0; j<=purch[i].piece; j++)
- {product[i] = j; comp(i+1);}
- }
- void init()
- {
- int i, j, n, p, t, code;
- for(i=0; i<100; i++)
- for(j=0; j<6; j++)
- offer[i][j] = 0;
- for(i=0; i<6; i++)
- {
- purch[i].piece = 0;
- purch[i].price = 0;
- product[i] = 0;
- }
- cout << "n*************************优惠前*************************n";
- cout << "请输入所购商品种类数:n";
- cin >> b; //初始化所购商品种类数
- for(i=1; i<=b; i++)
- {
- cout << "第" << i << "种商品的编码、购买数量、正常单价分别为(用空格分开)n";
- cin >> code; //商品的编码
- cin >> purch[i].piece >> purch[i].price; //购买该商品的总数和该种商品的正常单价
- num[code] = i;
- }
- cout << "n*************************优惠后*************************n";
- cout << "请输入优惠商品组合数(优惠方案数):n";
- cin >> s; //共有s种优惠商品组合
- for(i=1; i<=s; i++)
- {
- cout << "第" << i << "个优惠方案中商品的种类数为n";
- cin >> t; //t是优惠商品组合中商品的种类数
- for(j=1; j<=t; j++)
- {
- cout << "第" << i << "个优惠方案中第" << j << "种商品的编码、数量分别为(用空格分开)n";
- cin >> n >> p; //编码和数量
- offer[i][num[n]] = p;
- }
- cout << "第" << i << "个优惠方案的价格是:";
- cin >> offer[i][0]; //第i种优惠方案的价格
- }
- }
- //实现算法的主函数如下;
- int main()
- {
- init();
- comp(1);
- cout << "n****************所购商品应付的最少费用为****************n";
- cout << cost[product[1]][product[2]][product[3]][product[4]][product[5]] << endl;
- return 0;
- }