为什么贪心不可以qwq?
查看原帖
为什么贪心不可以qwq?
63915
女装蒟蒻楼主2020/10/17 11:14

按照w/t从大到小排序,先全放上面,再一本一本地放到下面,直到上面的宽度小于等于下面的厚度。最后判断<最后一本放到下面的厚度为1的书>是否可以拿上来,保证贪心的正确性(比如样例1)

#include <bits/stdc++.h>
using namespace std;
 
const int N = 105;
 
int n;
struct A{
	int t, w;
}a[N]; 
int tw, tt;
int l;
 
bool cmp(A x, A y){
	return 1.0 * x.w / x.t > 1.0 * y.w / y.t; 
}
 
int main(){
	scanf("%d", &n);
	for (int i = 1; i <= n; i ++){
		scanf("%d%d", &a[i].t, &a[i].w);
		tw += a[i].w;
	}
	sort(a + 1, a + n + 1, cmp);
	for (int i = 1; i <= n; i ++){
		tw -= a[i].w;
		tt += a[i].t;
		if (a[i].t == 1){
			l = i;
		}
		if (tw <= tt){
			break;
		}
	}
	if (l != 0 && tw + a[l].w <= tt - a[l].t){
		printf("%d", tt - a[l].t);
		return 0;
	}
	printf("%d", tt);
	return 0;
}

然而 Wrong answer on test 20 qwq

2020/10/17 11:14
加载中...