解题思路:假设每一组输入分别为ai1 ,ai2 ,bi , Ai=ai1+ai2(每一组的时间总和减去离开教室的时间) , Ki=Ai+bi=ai1+ai2+bi(每一组的时间总和) , n组(在课程群里面发消息的时刻)相加后得到:
(A1+A2+...+An)+(n-1)K1+(n-2)K2+(n-3)K3+...+K(n-1);
(A1+A2+...+An)是固定的
将Kn升序排序,依次带入便是最小
注意事项:
sum总和可能超过int范围,所以用long long
参考代码:
#include<iostream>
#include<stdlib.h>
using namespace std;
int nums[1000][3] = { 0 };//存放输入
int sums[1000] = { 0 };//存放前两位和,也可以省去
int sumss[1000] = { 0 };//存放三位和
int compare(const void* p1, const void* p2)
{
return *(int*)p1 - *(int*)p2;
}
int main()
{
int n;
int sum0 = 0;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> nums[i][0] >> nums[i][1] >> nums[i][2];
sums[i] = nums[i][0] + nums[i][1];
sumss[i] = sums[i] + nums[i][2];
sum0 += sums[i];//得到所有前两位总和
}
qsort(sumss, n, sizeof(int), compare); //排序
long long int sum = 0; //sum可能会超过Int 范围
for (int i = 0; i < n; i++)
{
sum += sumss[i] * (n - i - 1); //(n-1)Ki
}
sum += sum0;//将所有前两位总和相加得到结果
cout << sum;
return 0;
}
0.0分
5 人评分
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:607 |
C语言程序设计教程(第三版)课后习题10.1 (Java代码)浏览:1492 |
【蟠桃记】 (C语言代码)浏览:708 |
C语言程序设计教程(第三版)课后习题10.5 (C语言代码)浏览:566 |
简单的a+b (C语言代码)浏览:752 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:565 |
Hello, world! (C语言代码)浏览:766 |
1051(奇了怪了)浏览:747 |
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:525 |
IP判断 (C语言代码)浏览:592 |