• POJ 1170 Shopping Offers(完全背包+哈希)


    http://poj.org/problem?id=1170

    题意:
    有n种花的数量和价格,以及m种套餐买法(套餐会便宜些),问最少要花多少钱。

    思路:
    题目是完全背包,但这道题目不好处理的是套餐的状态,因为数量最多只有5,所有可以用6进制来记录状态。

    最后的话就是一个完全背包啦~

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<cstdio>
     5 #include<sstream>
     6 #include<vector>
     7 #include<stack>
     8 #include<queue>
     9 #include<cmath>
    10 #include<map>
    11 #include<set>
    12 using namespace std;
    13 typedef long long ll;
    14 typedef pair<int,int> pll;
    15 const int INF = 0x3f3f3f3f;
    16 const int maxn = 1e4 + 5;
    17 
    18 int n, m;
    19 int v;
    20 
    21 struct node
    22 {
    23     int code, st, num, price;
    24 }a[maxn];
    25 
    26 map<int,int> ID;
    27 
    28 int d[maxn];
    29 
    30 int main()
    31 {
    32     //freopen("in.txt","r",stdin);
    33     while(~scanf("%d",&n))
    34     {
    35         v=0;
    36         ID.clear();
    37 
    38         for(int i=0;i<n;i++)
    39         {
    40             scanf("%d%d%d",&a[i].code,&a[i].num,&a[i].price);
    41             a[i].st=pow(6.0,(double)i);
    42             v+=a[i].st*a[i].num;
    43             ID[a[i].code]=i;
    44         }
    45 
    46         scanf("%d",&m);
    47         for(int i=0;i<m;i++)
    48         {
    49             int t;
    50             scanf("%d",&t);
    51             a[i+n].st=0;
    52             while(t--)
    53             {
    54                 int code, num;
    55                 scanf("%d%d",&code,&num);
    56                 if(ID.find(code)==ID.end())  continue;
    57                 a[i+n].st+=a[ID[code]].st*num;
    58             }
    59             scanf("%d",&a[i+n].price);
    60         }
    61 
    62         for(int i=0;i<=v;i++)
    63             d[i]=INF;
    64         d[0]=0;
    65 
    66 
    67         for(int i=0;i<n+m;i++)
    68         {
    69             for(int j=a[i].st;j<=v;j++)
    70             {
    71                 d[j]=min(d[j],d[j-a[i].st]+a[i].price);
    72             }
    73         }
    74         printf("%d
    ",d[v]);
    75     }
    76     return 0;
    77 }
  • 相关阅读:
    刚子扯谈 活着 没那么简单
    改写整数
    刚子扯谈:一起聊聊微信这孙子
    刚子扯谈:未完待续的微信5.0
    Citrix 服务器虚拟化之十 Xenserver高可用性HA
    JS实现——俄罗斯方块
    一种文件捆绑型病毒研究
    XP系统登录界面,需要手动点击用户帐户后才会出现输入密码的界面
    加密javascript代码
    Python的在线编辑环境
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/7229919.html
Copyright © 2020-2023  润新知