dp能做吗?如果可以我哪里写错了?
查看原帖
dp能做吗?如果可以我哪里写错了?
1279718
phigros_player楼主2024/9/8 10:43
#include <bits/stdc++.h>
using namespace std;
int n,d;
int dis[100005]; 
int pri[100005];
int f[100005];
int distan(int i,int j){
	return dis[i]-dis[j];
}
int main(){
	memset(f,0x7f7f,sizeof(f));
	cin>>n>>d;
	for(int i=2;i<=n;i++){
		cin>>dis[i];
		dis[i]+=dis[i-1]; 
	}
	for(int i=1;i<=n;i++){
		cin>>pri[i];
	}
	int op=0;
	f[1]=0;
	for( int i = 2; i <= n; i ++){
		for( int j = i-1; j >= 1 ; j --){
			if(f[j] + ceil(distan(i,j)/d*1.0)*pri[j] < f[i]){
				f[i] = f[j] + ceil (( distan(i,j) - op * d )/d*1.0) * pri[j];
				op = ceil ( distan(i,j) / d * 1.0) * d - distan(i,j);//多余的油 
			}
		}
	}
	cout<<f[n];
}
2024/9/8 10:43
加载中...