题目为POJ 1170题目链接:http://poj.org/problem?id=1170
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
const int M=6;
const int inf=20000;
/*
这个题太妙了,因为每种商品的数量不超过5 这就可以很妙的利用一个六进制的数来记录相应的每种物品的数量,余数为1-5正好合适
动太规划每次都能给人带来太多的惊喜!
题目链接:http://poj.org/problem?id=1170
*/
const int base[6]={1,6,36,216,1296,7776};
struct Offer{
int st;
int price;
Offer(){
st=0;
price=0;
}
};
struct Item{
int cnt;
int p;
};
int n,m,id,state;
Offer offer[101];
Item item[5];
int hash[1000];
int dp[10000];
bool check(int x,int y){//检查一下五种物品的x状态和y状态是否满足各种物品的数量都符合给定物品的数量 即小于等于 如果超出了显然不是有效状态
for(int i=0;i<n;i++){
if((x%6+y%6)>item[i].cnt){
return false;
}
x/=6;
y/=6;
}
return true;
}
int calculate(int state){//求