算法提高 促销购物

时间限制:1.0s 内存限制:256.0MB

问题描述

  张超来到了超市购物。

  每个物品都有价格,正好赶上商店推出促销方案。就是把许多东西一起买更便宜(保证优惠方案一定比原价便宜)。物品要买正好的个数,而且不能为了便宜而买不需要的物品。

  张超拿到了优惠方案,和需要购买的物品清单,当然想求出最小的花费。他是信息学选手,自然地想到写个程序解决问题。

输入格式

  第一行促销物品的种类数(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 个商品。

输出格式

  一个整数ans,表示需要花的最小费用

样例输入

2

1 7 3 5

2 7 1 8 2 10

2

7 3 2

8 2 5

样例输出

14

import java.util.Hashtable;
import java.util.Scanner;
public class Main {//促销购物
private plan plan[];
private Hashtable<Integer, Integer> ha=new Hashtable<Integer, Integer>();
private static int pl[][],n,m;
private Node t[][][][][][];
private static boolean b[]; public void setT(int a,int b,int c,int d,int e,int f) {
t=new Node[a][b][c][d][e][f];
} public void setPlan(int n) {
plan=new plan[n];
} public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
Main ps=new Main();
int i,j;
n=Integer.parseInt(sc.next());
b=new boolean[n];
ps.setPlan(n);
for(i=0;i<n;i++)
{
ps.plan[i]=ps.new plan();
m=Integer.parseInt(sc.next());
ps.plan[i].n=m;
ps.plan[i].p=new int[m][2];
for(j=0;j<m;j++)
{
ps.plan[i].p[j][0]=Integer.parseInt(sc.next());
ps.plan[i].p[j][1]=Integer.parseInt(sc.next());
}
ps.plan[i].cost=Integer.parseInt(sc.next());
}
m=Integer.parseInt(sc.next());
pl=new int[5][3];
for(i=0;i<m;i++)
{
pl[i][0]=Integer.parseInt(sc.next());
pl[i][1]=Integer.parseInt(sc.next());
pl[i][2]=Integer.parseInt(sc.next());
ps.ha.put(pl[i][0],i);
}
ps.setT(n, pl[0][1]+1, pl[1][1]+1, pl[2][1]+1, pl[3][1]+1, pl[4][1]+1);
if(n!=0)i=fina(0,pl[0][1],pl[1][1],pl[2][1],pl[3][1],pl[4][1],ps);
else
{
i=0;
for(j=0;j<m;j++)i+=pl[j][1]*pl[j][2];
}
System.out.println(i);
} private static int fina(int x, int a1, int a2, int a3, int a4, int a5,Main ps) {
// TODO Auto-generated method stub
if(ps.t[x][a1][a2][a3][a4][a5]!=null)return ps.t[x][a1][a2][a3][a4][a5].n;
else
{
ps.t[x][a1][a2][a3][a4][a5]=ps.new Node();
if(b[x])
{
if(x==n-1)return ps.t[x][a1][a2][a3][a4][a5].n=a1*pl[0][2]+a2*pl[1][2]+a3*pl[2][2]+a4*pl[3][2]+a5*pl[4][2];
else return ps.t[x][a1][a2][a3][a4][a5].n=fina(x+1, a1, a2, a3, a4, a5, ps);
}
else
{
int i,c[],y;
c=new int[5];
c[0]=a1;c[1]=a2;c[2]=a3;c[3]=a4;c[4]=a5;
for(i=0;i<ps.plan[x].n;i++)
{
if(!ps.ha.containsKey(ps.plan[x].p[i][0]))
{
b[x]=true;
if(x==n-1)return ps.t[x][a1][a2][a3][a4][a5].n=a1*pl[0][2]+a2*pl[1][2]+a3*pl[2][2]+a4*pl[3][2]+a5*pl[4][2];
else return ps.t[x][a1][a2][a3][a4][a5].n=fina(x+1, a1, a2, a3, a4, a5, ps);
}
else
{
y=ps.ha.get(ps.plan[x].p[i][0]);
c[y]-=ps.plan[x].p[i][1];
if(c[y]<0)
{
if(x==n-1)return ps.t[x][a1][a2][a3][a4][a5].n=a1*pl[0][2]+a2*pl[1][2]+a3*pl[2][2]+a4*pl[3][2]+a5*pl[4][2];
else return ps.t[x][a1][a2][a3][a4][a5].n=fina(x+1, a1, a2, a3, a4, a5, ps);
}
}
}
if(x==n-1)return ps.t[x][a1][a2][a3][a4][a5].n=fina(x, c[0], c[1], c[2], c[3], c[4], ps)+ps.plan[x].cost;
return ps.t[x][a1][a2][a3][a4][a5].n=min(fina(x+1, a1, a2, a3, a4, a5, ps),fina(x, c[0], c[1], c[2], c[3], c[4], ps)+ps.plan[x].cost);
}
}
} private static int min(int x, int y) {
// TODO Auto-generated method stub
return x<y?x:y;
} class Node{
int n;
} class plan{
int p[][],cost,n;
}
}

Java实现 蓝桥杯VIP 算法提高 促销购物的更多相关文章

  1. Java实现 蓝桥杯VIP 算法提高 研究兔子的土豪

    试题 算法提高 研究兔子的土豪 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 某天,HWD老师开始研究兔子,因为他是个土豪 ,所以他居然一下子买了一个可以容纳10^18代兔子的巨大 ...

  2. Java实现 蓝桥杯VIP 算法提高 3-2求存款

    算法提高 3-2求存款 时间限制:1.0s 内存限制:256.0MB 问题描述 见计算机程序设计基础(乔林)P50第5题. 接受两个数,一个是用户一年期定期存款金额,一个是按照百分比格式表示的利率,计 ...

  3. Java实现 蓝桥杯VIP 算法提高 3-3求圆面积表面积体积

    算法提高 3-3求圆面积表面积体积 时间限制:1.0s 内存限制:256.0MB 问题描述 接受用户输⼊的数值,输出以该值为半径的(1)圆面积,(2)球体表面积,(3)球体体积.pi 取值3.1415 ...

  4. Java实现 蓝桥杯VIP 算法提高 5-3日历

    算法提高 5-3日历 时间限制:1.0s 内存限制:256.0MB 问题描述 已知2007年1月1日为星期一.设计一函数按照下述格式打印2007年以后(含)某年某月的日历,2007年以前的拒绝打印.为 ...

  5. Java实现 蓝桥杯VIP 算法提高 11-2删除重复元素

    算法提高 11-2删除重复元素 时间限制:10.0s 内存限制:256.0MB 问题描述 为库设计新函数DelPack,删除输入字符串中所有的重复元素.不连续的重复元素也要删除. 要求写成函数,函数内 ...

  6. Java实现 蓝桥杯VIP 算法提高 P0401

    算法提高 P0401 时间限制:1.0s 内存限制:256.0MB 输入一个无符号整数x,输出x的二进制表示中1的个数. 输入: 76584 输出: 7 import java.util.Scanne ...

  7. Java实现 蓝桥杯VIP 算法提高 理财计划

    算法提高 理财计划 时间限制:1.0s 内存限制:256.0MB 问题描述 银行近期推出了一款新的理财计划"重复计息储蓄".储户只需在每个月月初存入固定金额的现金,银行就会在每个月 ...

  8. Java实现 蓝桥杯VIP 算法提高 解二元一次方程组

    算法提高 解二元一次方程组 时间限制:1.0s 内存限制:256.0MB 问题描述 给定一个二元一次方程组,形如: a * x + b * y = c; d * x + e * y = f; x,y代 ...

  9. Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2

    算法提高 陶陶摘苹果2 时间限制:1.0s 内存限制:256.0MB 问题描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出n个苹果.苹果成熟的时候,陶陶就会跑去摘苹果.陶陶有个30厘米高的板凳, ...

随机推荐

  1. Badboy录制脚本时,提示脚本错误的解决方法

    如下,录制时发生错误:

  2. [coj 1353 Guessing the Number]kmp,字符串最小表示法

    题意:给一个字符串,求它的最小子串,使得原串是通过它重复得到的字符串的一个子串. 思路:先求最小长度,最小循环长度可以利用kmp的next数组快速得到,求出长度后然后利用字符串最小表示法求循环节的最小 ...

  3. [hdu3572]最大流(dinic)

    题意:有m台机器,n个任务,每个任务需要在第si~ei天之间,且需要pi天才能完成,每台机器每天只能做一个任务,不同机器每天不能做相同任务,判断所有任务是否可以做完. 思路: 把影响答案的对象提取出来 ...

  4. 聊聊 TypeScript 中的类型保护

    聊聊 TypeScript 中的类型保护 在 TypeScript 中使用联合类型时,往往会碰到这种尴尬的情况: interface Bird { // 独有方法 fly(); // 共有方法 lay ...

  5. Centos ps命令

    输出格式(ps -aux) USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND VSZ:占用的虚拟内存大小() RSS: COMMAND: 执 ...

  6. 数字化制造-基于Plant Simulation的冲压车间数字化仿真平台研究

    冲压车间是将板材冲压形成汽车车身.车厢.车底板等部件的过程,冲压是汽车生产四大加工工艺的首个工序,直接影响着汽车焊装.涂装.总装车间的生产.冲压车间生产具有以下特点: 换模时间长:每种冲压件均有一套专 ...

  7. 用matplotlib和pandas绘制股票MACD指标图,并验证化交易策略

    我的新书<基于股票大数据分析的Python入门实战>于近日上架,在这篇博文向大家介绍我的新书:<基于股票大数据分析的Python入门实战>里,介绍了这本书的内容.这里将摘录出部 ...

  8. python之PyCharm下载和安装教程

    PyCharm 是 JetBrains 公司(www.jetbrains.com)研发,用于开发 Python 的 IDE 开发工具.图 1 所示为 JetBrains 公司开发的多款开发工具,其中很 ...

  9. webpack指南(六)命令行环境配置

    webpack 命令行环境配置中,通过设置 --env 可以使你根据需要,传入尽可能多的环境变量.在 webpack.config.js 文件中可以访问到这些环境变量. webpack --env.N ...

  10. IE8/IE9/IE10打开网页后,自动设置浏览器模式为“IE8/IE9/IE10兼容性视图”

    http://blog.snsgou.com/post-16.html 作者:SNSGOU 发布于:2013-07-17 22:23:05  分类:CSS/HTML     评论(0)  浏览(132 ...