zoukankan      html  css  js  c++  java
  • luogu2732商店购物

    促销活动把一个或多个商品组合起来降价销售,例如:

    三朵花的价格是 5z 而不是 6z, 两个花瓶和一朵花的价格是 10z 而不是 12z。 编写一个程序,计算顾客购买一定商品的花费,尽量利用优惠使花费最少。尽管有时候添加其他商品可以获得更少的花费,但是你不能这么做。

    对于上面的商品信息,购买三朵花和两个花瓶的最少花费的方案是:以优惠价购买两个花瓶和一朵花(10z),以原价购买两朵花(4z)。

    输入格式:

    输入文件包括一些商店提供的优惠信息,接着是购物清单。(最多有5种商品)

    第一行 优惠方案的种类数(0 <= s <= 99)。

    第二行..第s+1 行 每一行都用几个整数来表示一种优惠方式。第一个整数 n (1 <= n <= 5),表示这种优惠方式由 n 种商品组成。后面 n 对整数 c 和 k 表示 k (1 <= k <= 5)个编号为 c (1 <= c <= 999)的商品共同构成这种优惠,最后的整数 p 表示这种优惠的优惠价(1 <= p <= 9999)。优惠价总是比原价低。

    第 s+2 行 这一行有一个整数 b (0 <= b <= 5),表示需要购买 b 种不同的商品。

    第 s+3 行..第 s+b+2 行 这 b 行中的每一行包括三个整数:c,k,p。 c 表示唯一的商品编号(1 <= c <= 999),k 表示需要购买的 c 商品的数量(1 <= k <= 5)。p 表示 c 商品的原价(1 <= p <= 999)。最多购买 5*5=25 个商品。

    输出格式:

    只有一行,输出一个整数:购买这些物品的最低价格。

    五维dp

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1e6+5;
     4 const int INF=1e9+7;
     5 int s,c,k,b,p,v[1005],tot,x[10],f[6][6][6][6][6];
     6 struct A
     7 {
     8     int n,p;
     9     int k[10];
    10 }g[205];
    11 template <class t>void red(t &x)
    12 {
    13     x=0;
    14     int w=1;
    15     char ch=getchar();
    16     while(ch<'0'||ch>'9')
    17     {
    18         if(ch=='-')
    19             w=-1;
    20         ch=getchar();
    21     }
    22     while(ch>='0'&&ch<='9')
    23     {
    24         x=(x<<3)+(x<<1)+ch-'0';
    25         ch=getchar();
    26     }
    27     x*=w;
    28 }
    29 void input()
    30 {
    31     freopen("input.txt","r",stdin);
    32 }
    33 void read()
    34 {
    35     red(s);
    36     for(int i=1;i<=s;++i)
    37     {
    38         red(g[i].n);
    39         for(int j=1;j<=g[i].n;++j)
    40         {
    41             red(c);
    42             red(k);
    43             if(!v[c])
    44                 v[c]=++tot;
    45             g[i].k[v[c]]=k;
    46         }
    47         red(g[i].p);
    48     }
    49     red(b);
    50     for(int i=1;i<=b;++i)
    51     {
    52         red(c);
    53         red(k);
    54         red(p);
    55         if(!v[c])
    56             v[c]=++tot;
    57         x[v[c]]=k;
    58         g[++s].n=1;
    59         g[s].k[v[c]]=1;
    60         g[s].p=p;
    61     }
    62 }
    63 void work()
    64 {
    65     for(int a=0;a<=5;++a)
    66         for(int b=0;b<=5;++b)
    67             for(int c=0;c<=5;++c)
    68                 for(int d=0;d<=5;++d)
    69                     for(int e=0;e<=5;++e)
    70                         f[a][b][c][d][e]=0x3f3f3f3f;
    71     f[0][0][0][0][0]=0;
    72     for(int i=1;i<=s;++i)
    73         for(int a=g[i].k[1];a<=x[1];++a)
    74             for(int b=g[i].k[2];b<=x[2];++b)
    75                 for(int c=g[i].k[3];c<=x[3];++c)
    76                     for(int d=g[i].k[4];d<=x[4];++d)
    77                         for(int e=g[i].k[5];e<=x[5];++e)
    78                             f[a][b][c][d][e]=min(f[a][b][c][d][e],f[a-g[i].k[1]][b-g[i].k[2]][c-g[i].k[3]][d-g[i].k[4]][e-g[i].k[5]]+g[i].p);
    79     printf("%d
    ",f[x[1]][x[2]][x[3]][x[4]][x[5]]);
    80 }
    81 int main()
    82 {
    83     //input();
    84     read();
    85     work();
    86     return 0;
    87 }
    View Code
  • 相关阅读:
    零点起飞学FlashCS6动画制作
    注意 方法的执行 顺序,并且 如果 为 nil的话,bool类型的数据 也默认是有值的,
    datepicker 的一个属性,
    用户体验 的一个原则,
    break 一下 便会 跳出 整个 switch ,
    原来 同一个 bundleid的项目 的下面 可以 通过这个 解决,诡异的问题,
    section 和 row,
    缓存,plist 和 json
    本地通知,UILocalNotification
    bundle id
  • 原文地址:https://www.cnblogs.com/Achensy/p/10844337.html
Copyright © 2011-2022 走看看