ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

文具订购(【CCF】NOI Online能力测试 入门组第一题)

2020-03-07 20:45:31  阅读:561  来源: 互联网

标签:输出 NOI 测试点 方案 int Online 样例 ans CCF


【题目描述】

小明的班上共有 n 元班费,同学们准备使用班费集体购买 3 种物品:
1.圆规,每个 7 元。
2.笔,每支 4 元。
3.笔记本,每本 3 元。
小明负责订购文具,设圆规,笔,笔记本的订购数量分别为 a,b,c,他订购的原则依次如下:
1.n 元钱必须正好用光,即 7a+4b+3c=n。
2.在满足以上条件情况下,成套的数量尽可能大,即 a,b,c 中的最小值尽可能大。
3.在满足以上条件情况下,物品的总数尽可能大,即 a+b+c 尽可能大。
请你帮助小明求出满足条件的最优方案。可以证明若存在方案,则最优方案唯一。

【输入格式】

从文件 order.in 中读入数据。
仅一行一个整数 n 表示班费数量。

【输出格式】

输出到文件 order.out 中。
若方案不存在则输出 -1。否则输出一行三个用空格分隔的非负整数 a,b,c 表示答案。

【样例1输入】

1

【样例1输出】

-1

【样例2输入】

14

【样例2输出】

1 1 1

【样例3输入】

33

【样例3输出】

1 2 6

【样例3解释】

a=2,b=4,c=1 也是满足条件 1,2 的方案,但对于条件 3,该方案只买了 7 个物品,不如 a=1,b=2,c=6 的方案。

【数据范围与提示】

对于测试点 1 ∼ 6:n ≤ 14。
对于测试点 7 ∼ 12:n 是 14 的倍数。
对于测试点 13 ∼ 18:n ≤ 100。
对于所有测试点:0 ≤ n ≤ 105。

【时间限制】

1.0s

【空间限制】

256MB

#include<iostream>
#include<algorithm>
using namespace std;
int n,d,x,m=-1,sum=0,ans[3]={0};
int main()
{
	cin>>n;
	for(int a=0;a<=n/7;a++)
		for(int b=0;b<=n/4;b++)
			for(int c=0;c<=n/3;c++)
			{
				if(7*a+4*b+3*c==n)//条件1 
				{
					d=min(a,b);
					x=min(d,c);
					if(x>m)//条件2 
					{
						ans[0]=a,ans[1]=b,ans[2]=c;
						m=x;
					}
					else if(x=m)//条件3 
					{
						int y=a+b+c;
						if(y>sum)
						{
							ans[0]=a,ans[1]=b,ans[2]=c;
							sum=y;
						}
					}
				}
			}
	if(ans[0]==0)
		cout<<"-1";
	else
		cout<<ans[0]<<" "<<ans[1]<<" "<<ans[2];
	return 0;
 } 

传送门:跑步(【CCF】NOI Online能力测试 入门组第二题)

标签:输出,NOI,测试点,方案,int,Online,样例,ans,CCF
来源: https://blog.csdn.net/weixin_45884316/article/details/104721346

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有