题目求改
  • 板块灌水区
  • 楼主封禁用户
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/19 18:46
  • 上次更新2024/11/19 19:04:46
查看原帖
题目求改
1338182
封禁用户楼主2024/11/19 18:46
题目描述

一天,晨晨发现自己的 n(2≤n≤100)只兔子跑到自己的花园里面,它们在尽情的吃 着她的宝贝花卉。晨晨看在眼里痛在心里,她现在只能把兔子逐个的抓回笼子里面。

而送 每只兔子回去的时间都不同,例如送第 i 只兔子回去需要 ti(1≤ti≤100)单位时间,那么 晨晨送第 i 只兔子来回共需要花费 2*ti 单位时间,另外每一只兔子的破坏力都不 同,例如第 i 只兔子在单位时间内破坏 di (1≤di≤100)朵花.


 现在的问题是,晨晨如何安排送这 n 只兔子回笼子才能使这些兔子的破坏最小。
输入


第一行:一个整数 n(1≤n≤100); 

接着有 n 行,每行两个空格分开的整数 ti di,分别代表第 i 只兔子的送回去的时间, 和单位时间破坏力。

输出

一行:一个整数,代表这些兔子破坏多少花卉

样例输入 

6
3 1
2 5
2 3
3 2
4 1
1 6
样例输出 复
86
提示
晨晨送兔子回去的顺序分别为:6, 2, 3, 4, 1, 5。其中先送第 6 只兔子回去,剩余兔子破坏(1+5+3+2+1)*2=24 朵花;送第 2 只兔子回去,剩余兔子破坏(1+3+2+1)*4=28 朵花;以此类推,送第 3、4、1 只兔子回去剩余兔子的破坏分别为 16、12 和 6 朵花;最后送第 5 只兔子回去的时候,没有兔子在花园里面了,所以破坏 0 朵花,最后总共破坏 24 + 28+ 16 + 12 + 6 = 86 朵花.
#include <bits/stdc++.h>
using namespace std;
struct node {
	double t, d;
	double flag;
}a[105];
int cmp(node x, node y) {
	return x.flag < y.flag;
}
int n, sum;
signed main() {
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> a[i].t >> a[i].d;
		a[i].flag = a[i].t / a[i].d;
	}
	sort(a, a + n, cmp);
	for (int i = 0; i < (n - 1); i++) {
		for (int j = i + 1; j < n; j++)
			sum += (2 * a[i].t * a[j].d);
	}
	cout << sum;
	return 0;
}

宣贯1

2024/11/19 18:46
加载中...