解题思路:假设每一组输入分别为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语言程序设计教程(第三版)课后习题11.3 (C语言代码)浏览:1052 |
C语言程序设计教程(第三版)课后习题9.8 (Java代码)浏览:1636 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1294 |
WU-输出正反三角形 (C++代码)浏览:1018 |
WU-整除问题 (C++代码)浏览:611 |
C语言程序设计教程(第三版)课后习题4.9 (C语言代码)浏览:682 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:784 |
杨辉三角 (C语言代码)浏览:484 |
C语言程序设计教程(第三版)课后习题11.5 (C语言代码)浏览:984 |
C语言程序设计教程(第三版)课后习题8.7 (C语言代码)浏览:526 |