算法提高 促销购物
时间限制: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 stubScanner 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 stubif(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 stubreturn x<y?x:y;}class Node{int n;}class plan{int p[][],cost,n;}
}

Java实现 蓝桥杯VIP 算法提高 促销购物相关推荐

  1. java算法买3瓶送1瓶_Java实现 蓝桥杯VIP 算法提高 促销购物

    算法提高 促销购物 时间限制:1.0s 内存限制:256.0MB 问题描述 张超来到了超市购物. 每个物品都有价格,正好赶上商店推出促销方案.就是把许多东西一起买更便宜(保证优惠方案一定比原价便宜). ...

  2. 蓝桥杯陶陶摘苹果C语言,Java实现 蓝桥杯VIP 算法提高 陶陶摘苹果2

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

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

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

  4. Java实现 蓝桥杯VIP 算法提高 扫雷

    算法提高 扫雷 时间限制:1.0s 内存限制:256.0MB 问题描述 扫雷游戏你一定玩过吧!现在给你若干个n×m的地雷阵,请你计算出每个矩阵中每个单元格相邻单元格内地雷的个数,每个单元格最多有8个相 ...

  5. Java实现 蓝桥杯VIP 算法提高 分苹果

    算法提高 分苹果 时间限制:1.0s 内存限制:256.0MB 问题描述 小朋友排成一排,老师给他们分苹果. 小朋友从左到右标号1-N.有M个老师,每次第i个老师会给第Li个到第Ri个,一共Ri-Li ...

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

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

  7. Java实现 蓝桥杯VIP 算法提高 文化之旅

    算法提高 文化之旅 时间限制:1.0s 内存限制:128.0MB 问题描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不 ...

  8. Java实现 蓝桥杯VIP 算法提高 班级排名

    算法提高 班级排名 时间限制:1.0s 内存限制:256.0MB 问题描述 达达在陶陶的影响下,也对学习慢慢的产生了兴趣. 他在每次考试之后,都会追着老师问,自己在班级的总名次是多少.考试一多,老师也 ...

  9. Java实现 蓝桥杯VIP 算法提高 3000米排名预测

    算法提高 3000米排名预测 时间限制:1.0s 内存限制:256.0MB 问题描述 3000米长跑时,围观党们兴高采烈地预测着最后的排名.因为他们来自不同的班,对所有运动员不一定都了解,于是他们分别 ...

最新文章

  1. AttributeError: ‘NoneType‘ object has no attribute ‘group‘
  2. 鸟哥的linux私房菜-文件压缩于打包-2
  3. Winform(C#)输入完毕后,按Enter键触发Button事件
  4. oracle左连接数据会对不上吗,一周工作总结–左连接造成的一些问题-Oracle
  5. 获取skipcase
  6. Linux内核学习笔记(2)-- 父进程和子进程及它们的访问方法
  7. 181215每日一句
  8. 苹果cmsV10二开视频+图片+小说网站源码
  9. 服务器虚拟化的几种方式,服务器虚拟化究竟应当选择哪种方式?
  10. Java常量池与方法区
  11. 财会法规与职业道德【2】
  12. 网络劫持问题都应该如何解决?
  13. 基于STM32-F401的平衡小车
  14. Convolutional Neural Networks for Sentence Classification(卷积神经网络句子分类)
  15. PDF 格式的文件编辑难度非常大, 相比 DOCX 格式,它存在的意义是什么?
  16. cesium设置相机的初始位置
  17. 动物识别系统代码python_动物识别专家系统课程设计
  18. AD18无法仿真问题的解决
  19. 烤仔看世界 | Zuckerverse:Facebook帝国的“元”设想
  20. 去耦电容 与 旁路电容 的区别

热门文章

  1. 锐捷设备设置console和enable密码
  2. 2022美亚杯电子数据取证大赛-个人赛
  3. TypeScript 基础数据类型与接口
  4. 机器学习笔记十五之图片文字识别
  5. unity 3d开发的大型网络游戏 1
  6. 【目标检测】小目标检测问题及解决方法
  7. 全球及中国建筑涂料市场产量格局与盈利前景状况分析报告2022版
  8. Linux下service mysqld start 启动MySQL提示Redirecting to /bin/systemctl start mysqld.servic
  9. 【随手记】fatal: cannot do a partial commit during a merge. 解决
  10. ICML 2019 Accepted Papers (Title, Author, Abstract, Code) (001-150)