求助
查看原帖
求助
785874
Heartstrings楼主2023/11/4 01:02

贪心

#include<bits/stdc++.h>
#define N 200005
#define int long long
using namespace std;
int n, m, i, j, k, cnt, a[N], b[N];
int new_oil, oil, money;
signed main(){
//	freopen("road.in", "r", stdin);
//	freopen("road.out", "w", stdout);
	scanf("%lld%lld", &n, &m);
	for(i=1; i<=n-1; ++i){
		scanf("%lld", &a[i]);
	} 
	for(i=1; i<=n; ++i){
		scanf("%lld", &b[i]);
	}
	for(i=1; i<=n-1; ++i){
		cnt = 0;
		if(i != 1) oil -= a[i];
		if(oil >= a[i+1] && i != n - 1) continue;//oil表示能走多远
		for(j=i+1; j<=n; ++j){
			if(b[i] > b[j]) break;
		}
		for(k=i; k<=j-1; ++k){
			cnt += a[i];
		}
//		printf("%lld %lld ", i, cnt);
		cnt -= oil;
		new_oil = ceil(1.0 * cnt / m);
		oil += new_oil * m;
		money += new_oil * b[i];
//		printf("%lld %lld\n", new_oil, money);
	}
	printf("%lld\n", money);
	return 0;
}
2023/11/4 01:02
加载中...