在牛客上刷到“购物清单”这道题,非常的有难度,现在将通过的代码贴一下,供大家参考。

强今天很开心,公司发给N元的年终奖。王强决定把年终奖用于购物,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:

主件 附件
电脑 打印机,扫描仪
书柜 图书
书桌 台灯,文具
工作椅

如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有 0 个、 1 个或 2 个附件。附件不再有从属于自己的附件。王强想买的东西很多,为了不超出预算,他把每件物品规定了一个重要度,分为 5 等:用整数 1 5 表示,第 5 等最重要。他还从因特网上查到了每件物品的价格(都是 10 元的整数倍)。他希望在不超过 N 元(可以等于 N 元)的前提下,使每件物品的价格与重要度的乘积的总和最大。

设第 j 件物品的价格为 v[j] ,重要度为 w[j] ,共选中了 k 件物品,编号依次为 j 1 , j 2 ,……, j k ,则所求的总和为:

v[j 1 ]*w[j 1 ]+v[j 2 ]*w[j 2 ]+ … +v[j k ]*w[j k ] 。(其中 * 为乘号)

请你帮助王强设计一个满足要求的购物单。

#include <stdlib.h>
#include <stdio.h>
int max(int a,int b)
{if(a>=b)return a;elsereturn b;
}
struct swv
{int count;int index;int w[3];int p[3];};
int main()
{int N,m;scanf("%d %d",&N,&m); int wv[60]={0};int wp[60]={0};int wq[60]={0};struct swv wi[60];int sum[3200]={0};int v,p,q;int l = N/10;int i;int j;int k;int s;for(i=1;i<=m;i++){scanf("%d %d %d",&v,&p,&q);wv[i]=v;wp[i]=p;wq[i]=q;}k=1;s=0;for(i=1;i<=m;i++){if(wq[i]==0){wi[k].w[0]=wv[i];wi[k].p[0]=wp[i];wi[k].index=i;k++;}}for(i=1;i<=k;i++){for(j=1;j<=m;j++){if(wq[j]!=0 && wq[j]==wi[i].index){s = ++wi[i].count;wi[i].w[s]=wv[j];wi[i].p[s]=wp[j];}}}int tempv1=0;int tempv2=0;int tempv3=0;int tempv4=0;int tempv5=0;int flag = 0;for(i=1;i<=k;i++){for(j=l;j>=1;j--){tempv1=0;tempv2=0;tempv3=0;tempv4=0;tempv5=0;flag=0;if((wi[i].w[0]+wi[i].w[1]+wi[i].w[2])/10<=j){tempv4=max(sum[j-(wi[i].w[0]+wi[i].w[1]+wi[i].w[2])/10]+wi[i].w[0]*wi[i].p[0]+wi[i].w[1]*wi[i].p[1]+wi[i].w[2]*wi[i].p[2],sum[j]);flag=1;}if((wi[i].w[0]+wi[i].w[2])/10<=j){tempv3=max(sum[j-(wi[i].w[0]+wi[i].w[2])/10]+wi[i].w[0]*wi[i].p[0]+wi[i].w[2]*wi[i].p[2],sum[j]);flag=1;}if((wi[i].w[0]+wi[i].w[1])/10<=j){tempv2=max(sum[j-(wi[i].w[0]+wi[i].w[1])/10]+wi[i].w[0]*wi[i].p[0]+wi[i].w[1]*wi[i].p[1],sum[j]);flag=1;} if((wi[i].w[0])/10<=j){tempv1=max(sum[j-(wi[i].w[0])/10]+wi[i].w[0]*wi[i].p[0],sum[j]);flag=1;}tempv5=max(tempv1,tempv2);tempv5=max(tempv5,tempv3);tempv5=max(tempv5,tempv4);if(flag==1)sum[j] = tempv5;}}printf("%d\n",sum[l]);
}

C/C++编程题之购物清单相关推荐

  1. C算法编程题(七)购物

    前言 上一篇<C算法编程题(六)串的处理> 有些朋友看过我写的这个算法编程题系列,都说你写的不是什么算法,也不是什么C++,大家也给我提出用一些C++特性去实现问题更方便些,在这里谢谢大家 ...

  2. 数据结构面试题编程题_您下次编程面试时应该了解的顶级数据结构

    数据结构面试题编程题 by Fahim ul Haq 通过Fahim ul Haq Niklaus Wirth, a Swiss computer scientist, wrote a book in ...

  3. C++ Primer Plus 第九章编程题练习

    C++ Primer Plus 第九章编程题练习 第一题 题目描述 下面是一个头文件: const int Len = 40;struct golf {char fullname[Len];int h ...

  4. 3.java基础--- if、switch语句编程题

    java基础- 3if语句编程题 if判断语句 题目1(训练) 李雷想买一个价值7988元的新手机,她的旧手机在二手市场能卖1500元,而手机专卖店推出以旧换新的优惠,把她的旧手机交给店家,新手机就能 ...

  5. 《基于嵌入式实时操作系统的编程技术》笔记清单:第六章行为同步

    <基于嵌入式实时操作系统的编程技术>笔记清单:第三章任务划分. <基于嵌入式实时操作系统的编程技术>笔记清单:第四章任务设计. <基于嵌入式实时操作系统的编程技术> ...

  6. 程序员双十一必备购物清单

    程序员双十一必备购物清单 这手还剁不剁? 小智 2018 年 11 月 9 日 话题:硬件文化 & 方法其他阿里巴巴 这篇文章不会教你去怎么研究花里胡哨的双十一购物规则(其实是我们自己也不会) ...

  7. Python快速编程入门 第2版 实训案例及课后编程题

    目录 本文档仅供参考,更新了 第2章 第3章 第4章 第5章 第6章 第7章 本文档仅供参考,更新了6.7章 第2章 2.4.1打印购物小票 蚂蚁森林是支付宝客户端发起"碳账户"的 ...

  8. 做编程题没有思路怎么办

    [来信] 老师您好! 我是一名计算机专业大二的学生,我现在在做一系列c语言竞赛一些容易的题目,可是我发现我碰到的问题会很没有思路,不知道方向,看见网上的很多同学都能够解决,而我却不能,我不知道自己差到 ...

  9. C++ Primer Plus 第七章编程题练习

    C++ Primer Plus 第七章编程题练习 第一题 题目描述 编写一个程序,不断要求用户输入两个数,直到其中的一个为0.对于每两个数,程序将使用一个 函数来计算它们的调和平均数,并将结果返回给m ...

  10. 01-Java基础语法_编程题答案

    Java基础语法编程题 一.初识Java 无答案. 二.变量.数据类型和运算符 1.使用变量存储以下MP3信息,并打印输出 品牌(brand):爱国者F928 重量(weight):12.4 电池类型 ...

最新文章

  1. C#与时间有关的一些方法
  2. java中的json_java中的json使用
  3. glibc的头文件 linux_求助,编译glibc头文件时出错
  4. Java如何随机出石头剪刀布_JAVA编程实现石头剪刀布
  5. 一些网站github等无法连接服务器的解决办法
  6. Android 命名规范 (提高代码可以读性) 转
  7. Spring Security HttpSecurity.formLogin
  8. 标准化设计解决方案 - 标记语言和样式手册 表单
  9. 机器学习-决策树(ID3、C4.5、CART)
  10. 创建单IP的×××网络
  11. SAP表维护自动带出对象属性
  12. ORA-03113: 通信通道的文件结尾
  13. 简约黑板擦特效表白网源码
  14. 【Openbravo开发】Openbravo windows开发环境搭建
  15. 数学建模之熵权法——基于Topsis模型
  16. 计算机绘画社团活动教案,电脑绘画社团课教师教案.doc
  17. Toast 消息提示框
  18. 音乐 美术 劳技 计算机教研组工作总结,音体美信息教研组工作总结
  19. 生成拼音语料及拼音识别转换成中文
  20. nyoj 一笔画问题

热门文章

  1. Linux EXT4文件系统简介
  2. 大数据与传统数仓的区别?
  3. 统一认证 ldap mysql_LDAP简述及统一认证说明
  4. js封装倒计时函数实现倒计时效果
  5. 【每日一具9】Gif动画录制工具
  6. 解决 开发小程序时报错 Page ... has not been registered yet.
  7. 怎样修改管家婆服务器密码,管家婆辉煌版如何设置权限和修改操作员密码口令...
  8. 网络工程师职场进化手册
  9. python遍历文件夹下的所有文件
  10. 谷歌linux浏览器下载文件夹在哪,如何查看谷歌浏览器下载的文件路径?