写了一个多小时样例过了但是10分
查看原帖
写了一个多小时样例过了但是10分
1097884
shuhao楼主2024/8/4 14:46

五花八门

#include <bits/stdc++.h>
using namespace std;

const int N = 1e5, inf = 0x3f3f3f3f;
int n, d, v[N+10], a[N+10];
int Max, Min, sum[N+10];

int num[N+10];

int find(int x, int y, double now) {
	y += now*d;
	for(int i = n; i > x; i--) {
		if(sum[i] - sum[x] <= y) {
			return i;
		}
	}
	return 0;
}

int dfs(int x, double now) {
	if(x == n) return 0;
	Max = ceil(1.0 * sum[n]-sum[x]/d - now);
	Min = ceil(1.0 * v[x]/d - now);
	int ans = inf;
	for(int i = Min; i <= Max; i++) {
		int S = find(x, i*d, now);
		if(S) {
			int k = i*a[x] + dfs(S, now + i - (1.0*(sum[S]-sum[x])/d));
			ans = min(ans, k);
		}
	}
	if(ans == inf) ans = -1;
	return ans;
}

int main() {
	cin >> n >> d;
	for(int i = 1; i < n; i++) {
		cin >> v[i];
		sum[i+1] = sum[i] + v[i];
	}
	for(int i = 1; i <= n; i++) cin >> a[i];
	cout << dfs(1, 0);
	
    return 0;
}

帮帮我吧!

2024/8/4 14:46
加载中...