问题大意:商店进行优惠活动,每一件商品的价格达到500以上将对下一件商品减少200,达到1000减少500,达到2000减少1000.也可以将前几件商品看作一个组合(比如299,399,599),那么下一件商品就会减少500元,但是前三个商品不优惠.现在需要购买一系列商品,如何实现最优的购买策略?
此题穷举法可解:首先对所有商品进行排序,按照价格从高到低进行排序.然后寻找一个商品区间[0,k1],然后递归的求解区间[k1+1,n]的最优解.当然,需要注意的细节是在求解下一个区间是必须代入上一个区间的折扣.同时我们利用一个string变量记录相应的区间信息.
#include "iostream"
#include "sstream"
#include "vector"
#include "cmath"
#include "algorithm"
#include "numeric"
#define disc(price) ((price < 500) ? 0:(price < 1000 ? 200:(price<2000?500:1000)))
using namespace std;
const long long int I