通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"NOIP真题" 试卷中 NOIP第二十四届全国青少年信息学奥林匹克联赛初赛试题[2018提高组] 中有题目如下:
第1题
一只小猪要买 N 件物品 (N 不超过 1000)。
它要买的所有物品在两家商店里都有卖。第 i 件物品在第一家商店的价格是 a[i],在第二家商店的价格是 b[i],两个价格都不小于 0 且不超过 10000。如果在第一家商店买的物品的总额不少于50000,那么在第一家店买的物品都可以打95 折(价格变为原来的 0.95 倍)。
求小猪买齐所有物品所需最少的总额。
输入:第一行一个数 N。接下来 N 行,每行两个数。第 i 行的两个数分别代表 a[i], b[i]。
输出:输出一行一个数,表示最少需要的总额,保留两位小数。
试补全程序。
#include <cstdio> #include <algorithm> using namespace std; const int Inf = 1000000000; const int threshold = 50000; const int maxn = 1000; int n, a[maxn], b[maxn]; bool put_a[maxn]; int total_a, total_b; double ans; int f[threshold]; int main() { scanf("%d", &n); total_a = total_b = 0; for (int i = 0; i < n; ++i) { scanf("%d%d", a + i, b + i); if (a[i] <= b[i]) total_a += a[i]; else total_b += b[i]; } ans = total_a + total_b; total_a = total_b = 0; for (int i = 0; i < n; ++i) { if (____(1)____) { put_a[i] = true; total_a += a[i]; } else{ put_a[i] = false; total_b += b[i]; } } if (____(2)____) { printf("%.2f", total_a * 0.95 + total_b); return 0; } f[0] = 0; for (int i = 1; i < threshold; ++i) f[i] = Inf; int total_b_prefix = 0; for (int i = 0; i < n; ++i) { if (!put_a[i]) { total_b_prefix += b[i]; for (int j = threshold - 1; j >= 0; --j) { if (____(3)____ >= threshold && f[j] != Inf) ans = min(ans, (total_a + j + a[i]) * 0.95 + ____(4)____); f[j] = min(f[j] + b[i], j >= a[i] ? ____(5)____ : Inf); } } } printf("%.2f", ans); return 0; }
所属试卷:NOIP第二十四届全国青少年信息学奥林匹克联赛初赛试题[2018提高组]
有如下程序(浮点格式控制相关),若程序的输出是:12.
已知类B、D的定义及程序段(虚函数、多态性),运行这个
下列Java源程序结构中三种语句的次序,正确的是( )
有以下程序程序的运行结果是( )。
给定程序中,函数fun的功能是:找出100至x(x≤9
以下选项中错误的是( )。
若有定义语句:库函数strcpy的功能是复制字符串,以
以下程序的功能是:通过调用calc函数,把所求得的两数
有以下程序:程序的运行结果是( )。
利用函数模板,设计求一个数组元素之和的函数sum和两个
请在下面程序的横线处填上适当内容,以使程序完整,并使程
Python集合不支持使用下标访问其中的元素。
字典中多个元素之间使用_________分隔开,每个元
查看变量内存地址的Python内置函数是_______
以下程序运行结果是( )。
单链表的结点类型定义为:指针p指向链表中间的某一个结点
若是a是int型变量,且a的初值为6,则执行表达式a+
若有定义float[3][5],则a数组所含数组元素个
下面程序段是找出整数的所有因子。请填空______.
集线器是工作在( )的设备
在Windows的命令窗口中,以超级管理员身份连接My
计算机中的算法指的是解决某一个问题的有限运算序列,它必
若已知一个栈的入栈序列是1,2,3,…,n,其输出序列
功能:根据整型形参m,计算如下公式的值:y=1/2+1
设a=3,b=4,c=4,则表达式a+b>c&&b==
执行下面两个语句,输出的结果是_____。
设含有 10个元素的集合的全部子集数为 S,其中由 7
如图所示,图中每条边上的数字表示该边的长度,则从 A
(选排列)下面程序的功能是利用递归方法生成从 1 到
在下列关于计算机语言的说法中,正确的有( )。
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2