快快编程上共有n题,实在是太多了估计没人能做完。做对第i题会得到si分,但需要花费ti小时。你作为一个聪明的刷题者,希望能完成其中的k题,该如何挑选才能使每小时的平均得分最高呢?用c++怎么写
时间: 2023-02-27 10:52:44 浏览: 133
如果要挑选 k 题,使每小时的平均得分最高,可以使用贪心策略。
按照每题的得分除以所需时间的比值从大到小进行排序,然后选择前 k 题即可。
代码实现如下:
```
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 10010;
int n, k;
int s[N], t[N];
bool cmp(int a, int b)
{
return (s[a] * t[b]) > (s[b] * t[a]);
}
int main()
{
scanf("%d%d", &n, &k);
for(int i = 0; i < n; i++)
{
scanf("%d%d", &s[i], &t[i]);
}
int ans = 0;
int index[N];
for(int i = 0; i < n; i++)
{
index[i] = i;
}
sort(index, index + n, cmp);
for(int i = 0; i < k; i++)
{
ans += s[index[i]] * t[index[i]];
}
printf("%d\n", ans);
return 0;
}
```
相关问题
OR BL,SI在语法上是对的吗
这个问题的答案取决于上下文。
如果您在使用汇编语言,那么OR BL,SI是不正确的语法。因为在汇编语言中,OR指令需要两个操作数,但是SI是一个寄存器而不是一个立即数或者内存地址。正确的写法可能是OR BL,[SI]或者OR BL, $5。
如果您在使用其他编程语言,那么OR BL,SI可能是合法的语法,因为不同的编程语言有不同的语法规则和指令格式。
si5338 编程指南
Si5338是一款高性能时钟器件,编程指南为用户提供了详细的操作步骤和相关信息,以便正确地配置和控制此器件。
首先,编程指南介绍了Si5338的主要功能和特点。Si5338具有多个时钟输出通道,可通过编程方式进行配置。它支持多种输入频率,并且具有灵活的输出频率选择。此外,它还提供了时钟源输入切换、分频和相位调整等功能。
编程指南详细解释了Si5338的编程寄存器和位字段,这些是用于配置器件的重要参数。用户可以通过I2C接口与器件进行通信,并根据需要编写相应的寄存器值。编程指南提供了寄存器表格和位字段说明,以帮助用户理解和设置器件的配置。
在编程指南中,还提供了一些常用的应用示例和配置建议。这些示例涉及不同的时钟输出配置,包括频率分频、相位调整和输出使能等。此外,指南还讨论了一些常见的问题和故障排除方法,以供用户参考。
编程指南还介绍了Si5338的电源和时钟输入要求,以及器件的温度特性和封装信息。这些信息对于用户在实际应用中正确使用Si5338至关重要。
总而言之,Si5338编程指南提供了一个全面的手册,使用户能够理解、配置和使用Si5338时钟器件。通过仔细研读和正确运用编程指南,用户可以充分发挥Si5338的功能和性能,满足各种应用需求。