社区讨论
可以用double吗
P2466[SDOI2008] Sue 的小球参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @mhjdnf6z
- 此快照首次捕获于
- 2025/11/04 00:51 4 个月前
- 此快照最后确认于
- 2025/11/04 00:51 4 个月前
为什么没过样例,换long long就可以A
CPP#include<bits/stdc++.h>
#define db double
#define f(i,b,e) for(int i=b;i<=e;i++)
using namespace std;
int n;
db x0,dp[2][1005][1005],w[1005][1005],qzh[1005];
struct node{db x,y,v;}a[1005];
int main(){
scanf("%d%lf",&n,&x0);a[n+1].x=x0;
f(i,1,n)
scanf("%lf",&a[i].x);
f(i,1,n)
scanf("%lf",&a[i].y);
f(i,1,n)
scanf("%lf",&a[i].v); n++;
sort(a+1,a+1+n,[](node xx,node yy){return xx.x<yy.x;});
f(i,1,n) qzh[i]=qzh[i-1]+a[i].v;
f(i,1,n) f(j,i,n) w[i][j]=qzh[n]-(qzh[j]-qzh[i-1]);
int tt=0;
f(i,1,n){
if(x0==a[i].x){
tt=i;
break;
}
}
memset(dp,-0x7f7f7f7f,sizeof(dp));
//dp[0][i][j]=dp[0][i+1][j]+a[i].y-w[i+1][j]*(a[i+1].x-a[i].x);
//dp[1][i][j]=dp[1][i][j-1]+a[j].y-w[i][j-1]*(a[j].x-a[j-1].x);
dp[0][tt][tt]=dp[1][tt][tt]=0;
f(len,2,n){
f(i,1,n-len+1){
int j=i+len-1;
dp[0][i][j]=max(dp[0][i][j],dp[0][i+1][j]+a[i].y-w[i+1][j]*(a[i+1].x-a[i].x));
dp[0][i][j]=max(dp[0][i][j],dp[1][i+1][j]+a[i].y-w[i+1][j]*(a[j].x-a[i].x));
dp[1][i][j]=max(dp[1][i][j],dp[1][i][j-1]+a[j].y-w[i][j-1]*(a[j].x-a[j-1].x));
dp[1][i][j]=max(dp[1][i][j],dp[0][i][j-1]+a[j].y-w[i][j-1]*(a[j].x-a[i].x));
}
}
printf("%.3lf\n",max(dp[1][1][n],dp[0][1][n])/1000.00);
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...