C/C++编程题之购物清单
在牛客上刷到“购物清单”这道题,非常的有难度,现在将通过的代码贴一下,供大家参考。
强今天很开心,公司发给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++编程题之购物清单相关推荐
- C算法编程题(七)购物
前言 上一篇<C算法编程题(六)串的处理> 有些朋友看过我写的这个算法编程题系列,都说你写的不是什么算法,也不是什么C++,大家也给我提出用一些C++特性去实现问题更方便些,在这里谢谢大家 ...
- 数据结构面试题编程题_您下次编程面试时应该了解的顶级数据结构
数据结构面试题编程题 by Fahim ul Haq 通过Fahim ul Haq Niklaus Wirth, a Swiss computer scientist, wrote a book in ...
- C++ Primer Plus 第九章编程题练习
C++ Primer Plus 第九章编程题练习 第一题 题目描述 下面是一个头文件: const int Len = 40;struct golf {char fullname[Len];int h ...
- 3.java基础--- if、switch语句编程题
java基础- 3if语句编程题 if判断语句 题目1(训练) 李雷想买一个价值7988元的新手机,她的旧手机在二手市场能卖1500元,而手机专卖店推出以旧换新的优惠,把她的旧手机交给店家,新手机就能 ...
- 《基于嵌入式实时操作系统的编程技术》笔记清单:第六章行为同步
<基于嵌入式实时操作系统的编程技术>笔记清单:第三章任务划分. <基于嵌入式实时操作系统的编程技术>笔记清单:第四章任务设计. <基于嵌入式实时操作系统的编程技术> ...
- 程序员双十一必备购物清单
程序员双十一必备购物清单 这手还剁不剁? 小智 2018 年 11 月 9 日 话题:硬件文化 & 方法其他阿里巴巴 这篇文章不会教你去怎么研究花里胡哨的双十一购物规则(其实是我们自己也不会) ...
- Python快速编程入门 第2版 实训案例及课后编程题
目录 本文档仅供参考,更新了 第2章 第3章 第4章 第5章 第6章 第7章 本文档仅供参考,更新了6.7章 第2章 2.4.1打印购物小票 蚂蚁森林是支付宝客户端发起"碳账户"的 ...
- 做编程题没有思路怎么办
[来信] 老师您好! 我是一名计算机专业大二的学生,我现在在做一系列c语言竞赛一些容易的题目,可是我发现我碰到的问题会很没有思路,不知道方向,看见网上的很多同学都能够解决,而我却不能,我不知道自己差到 ...
- C++ Primer Plus 第七章编程题练习
C++ Primer Plus 第七章编程题练习 第一题 题目描述 编写一个程序,不断要求用户输入两个数,直到其中的一个为0.对于每两个数,程序将使用一个 函数来计算它们的调和平均数,并将结果返回给m ...
- 01-Java基础语法_编程题答案
Java基础语法编程题 一.初识Java 无答案. 二.变量.数据类型和运算符 1.使用变量存储以下MP3信息,并打印输出 品牌(brand):爱国者F928 重量(weight):12.4 电池类型 ...
最新文章
- C#与时间有关的一些方法
- java中的json_java中的json使用
- glibc的头文件 linux_求助,编译glibc头文件时出错
- Java如何随机出石头剪刀布_JAVA编程实现石头剪刀布
- 一些网站github等无法连接服务器的解决办法
- Android 命名规范 (提高代码可以读性) 转
- Spring Security HttpSecurity.formLogin
- 标准化设计解决方案 - 标记语言和样式手册 表单
- 机器学习-决策树(ID3、C4.5、CART)
- 创建单IP的×××网络
- SAP表维护自动带出对象属性
- ORA-03113: 通信通道的文件结尾
- 简约黑板擦特效表白网源码
- 【Openbravo开发】Openbravo windows开发环境搭建
- 数学建模之熵权法——基于Topsis模型
- 计算机绘画社团活动教案,电脑绘画社团课教师教案.doc
- Toast 消息提示框
- 音乐 美术 劳技 计算机教研组工作总结,音体美信息教研组工作总结
- 生成拼音语料及拼音识别转换成中文
- nyoj 一笔画问题
热门文章
- Linux EXT4文件系统简介
- 大数据与传统数仓的区别?
- 统一认证 ldap mysql_LDAP简述及统一认证说明
- js封装倒计时函数实现倒计时效果
- 【每日一具9】Gif动画录制工具
- 解决 开发小程序时报错 Page ... has not been registered yet.
- 怎样修改管家婆服务器密码,管家婆辉煌版如何设置权限和修改操作员密码口令...
- 网络工程师职场进化手册
- python遍历文件夹下的所有文件
- 谷歌linux浏览器下载文件夹在哪,如何查看谷歌浏览器下载的文件路径?