POJ 1170--Shopping Offers(状压+背包)
来源:互联网 发布:java set方法 编辑:程序博客网 时间:2024/05/01 11:25
来源:http://poj.org/problem?id=1170
题意:给定一个订单的n种商品,每种商品都有一个价格、数量,在给定m种组合,这些组合会得到便宜的价钱。问怎么分配使总价值最小。
分析:先将每种物品用一个六进制表示,一个物品为1,第2个为6...,这样总状态为num1*1+num2*6+...然后对n+m种物品进行一个完全背包。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <map>#include <set>#include <cstring>using namespace std;#define MAX 110000#define INF (1<<29)#define min(a,b) ((a)<(b)?(a):(b))struct product{ int code,digit,num,price;} arr[MAX],special[MAX];int dp[MAX],hash[1000],n,m,nn,ans;int digit[10] = {1,6,36,216,1296,7776,46656,279936};int main(){ int tp,num,code,k; while (scanf("%d",&n) != EOF) { ans = nn = 0; memset(hash,-1,sizeof(hash)); for (int i = 0; i < digit[6]; ++i) dp[i] = INF; for (int i = 0; i < n; ++i) { scanf("%d%d%d",&arr[i].code,&arr[i].num,&arr[i].price); arr[i].digit = digit[i]; hash[arr[i].code] = i; nn += arr[i].num * arr[i].digit; ans += arr[i].num * arr[i].price; } scanf("%d",&m); for (int i = 0; i < m; ++i) { scanf("%d",&k); arr[i+n].digit = 0; for(int j = 0; j < k; ++j) { scanf("%d%d",&code,&num); if (hash[code] == -1) continue; arr[i+n].digit += arr[hash[code]].digit * num; } scanf("%d",&arr[i+n].price); } dp[0] = 0; for(int i = 0; i <= nn; ++i) for(int j = 0; j < n + m; ++j) dp[i+arr[j].digit] = min(dp[i+arr[j].digit],dp[i]+arr[j].price); ans = min(ans,dp[nn]); printf("%d\n",ans); } return 0;}
- POJ 1170--Shopping Offers(状压+背包)
- POJ 1170 Shopping Offers (状压DP)
- Poj 1170 Shopping Offers dp背包
- poj 1170 Shopping Offers 完全背包
- poj 1170 shopping offers
- poj 1170 Shopping Offers
- poj 1170 Shopping Offers
- POJ 1170 Shopping Offers
- POJ 1170 Shopping Offers
- poj 1170 Shopping Offers
- POJ 1170 - Shopping Offers
- 状压dp-poj-1170-Shopping Offers
- POj 1170 Shopping Offers(变形背包+进制优化) 100
- POJ-1170 Shopping Offers 状态压缩加背包
- poj 1170 Shopping Offers-动态规划-完全背包
- POJ 1170 Shopping Offers 状态压缩dp+完全背包
- POJ --1170 -Shopping Offers--DP
- POJ 1170 Shopping Offers 笔记
- 解决中国大陆Eclipse adt sdk等软件下载更新不了的问题
- js操作select控件大全(新增、修改、删除、选择)
- emf2wmf
- linux下 C编程改变输出字体颜色
- 有些爱,如镜花水月
- POJ 1170--Shopping Offers(状压+背包)
- 【C库函数】strcat实现
- 反射的应用,读取properties配置文件中的数据(普通InputStream方式,类加载方式),再调用运行
- UVa 147Dollars
- 创建高安全性PHP网站的几个实用要点
- Linux僵尸进程(Zombie or defunct)
- 分布式——负载均衡
- 鸡蛋饭
- sendmessage,和postmessage的区别问题