爆10%求助,必关
查看原帖
爆10%求助,必关
1047961
lxl2012楼主2024/10/17 22:05
#include<iostream>
#define int long long
const int N = 260;
const int W = 1010;
int dp[N][W][2],t[N],n,w[N],XW;
signed main(){
	scanf("%lld%lld",&n,&XW);
	for(int i = 1;i <= n;i ++){
		scanf("%lld%lld",w + i,t + i);
	}
	for(int i = 1;i <= n;i ++){
		for(int j = 1;j <= XW;j ++){
			if(i != 1){
				int way1 = (dp[i - 1][j][1] + t[i]) * 1000 / (dp[i - 1][j][0] + w[i]);
				int way2 = dp[i - 1][j][1] * 1000 / dp[i - 1][j][0];
				if(way1 > way2){
					dp[i][j][0] = dp[i - 1][j][0] + w[i];
					dp[i][j][1] = dp[i - 1][j][1] + t[i];
				}
				else{
					dp[i][j][0] = dp[i - 1][j][0];
					dp[i][j][1] = dp[i - 1][j][1];
				}
			}
			else{
				dp[i][j][0] = w[i];
				dp[i][j][1] = t[i];
			}
		}
	}
	printf("%lld",dp[n][XW][1] * 1000 / dp[n][XW][0]);
	return 0;
}

10!!!!!!!!!!!!!!!!!!!!!!

贪心都弱?

#include<iostream>
#include <algorithm>
const int N = 260;
struct cow{
	int w,t;
	double v;
}cows[N];
int W,n,sumW,sumT;
bool cmp(cow x,cow y){
	if(x.v != y.v)return x.v < y.v;
	return x.t < y.t;
}
int main(){
	scanf("%d%d",&n,&W);
	for(int i = 1;i <= n;i ++){
		scanf("%d%d",&cows[i].w,&cows[i].t);
		cows[i].v = cows[i].w * 1.0 / cows[i].t;
	}
	std::sort(cows + 1,cows + n + 1,cmp);
	for(int i = 1;i <= n;i ++){
		sumW += cows[i].w;
		sumT += cows[i].t;
		if(sumW >= W) break;
	}
	if(sumW < W) printf("0");
	else printf("%d",sumT * 1000 / sumW);
	return 0;
}
2024/10/17 22:05
加载中...