社区讨论

关于机器猫大战唐僧这件事

P2466[SDOI2008] Sue 的小球参与者 2已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mjiazddv
此快照首次捕获于
2025/12/23 16:08
2 个月前
此快照最后确认于
2025/12/25 22:15
2 个月前
查看原帖
标题骗你点进来的
呜呜呜为何代码连样例都过不了
正确输出:0.000
实际输出:0.072
望大佬找出错误,万分感谢!!!
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=1e3+10;
ll dp1[MAXN][MAXN]; //l->r->l
ll dp2[MAXN][MAXN]; //l->r
ll sum[MAXN];
int n,start;
ll tmp;

struct node{
	int x,y,v;
}egg[MAXN];

bool cmp(node a,node b){
	return a.x<b.x;
}

ll calc(int l,int r){
	return sum[r]-sum[l-1];
}

int main(){
	memset(dp1,0x3f,sizeof(dp1));
	memset(dp2,0x3f,sizeof(dp2));
	scanf("%d%d",&n,&start);
	for(int i=1;i<=n;++i)
		scanf("%d",&egg[i].x);
	for(int i=1;i<=n;++i){
		scanf("%d",&egg[i].y);
		tmp+=egg[i].y;
	}
	for(int i=1;i<=n;++i)
		scanf("%d",&egg[i].v);
	egg[++n].x=start;
	sort(egg+1,egg+n+1,cmp);
	
	for(int i=1;i<=n;++i){
		sum[i]=sum[i-1]+egg[i].v;
		if(egg[i].x==start&&egg[i].v==0){
			dp1[i][i]=dp2[i][i]=0;
		}
	} 
	
	for(int len=2;len<=n;++len){
		for(int i=1;i<=n-len+1;++i){
			int j=i+len-1;
			dp1[i][j]=min(dp1[i][j],dp1[i+1][j]+(egg[i+1].x-egg[i].x)*(calc(1,i)+calc(j+1,n)));
			dp1[i][j]=min(dp1[i][j],dp2[i+1][j]+(egg[j].x-egg[i].x)*(calc(1,i)+calc(j+1,n)));
			dp2[i][j]=min(dp2[i][j],dp1[i][j-1]+(egg[j].x-egg[i].x)*(calc(1,i-1)+calc(j,n)));
			dp2[i][j]=min(dp2[i][j],dp2[i][j-1]+(egg[j-1].x-egg[j].x)*(calc(1,i-1)+calc(j,n)));
		}
	}
	tmp=tmp-min(dp1[1][n],dp2[1][n]);
	printf("%.3lf",tmp/1000.0);
	return 0;
}

回复

4 条回复,欢迎继续交流。

正在加载回复...