社区讨论
80分,求大佬帮忙修改一下
P2157[SDOI2009] 学校食堂参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi6m1p8s
- 此快照首次捕获于
- 2025/11/20 07:05 4 个月前
- 此快照最后确认于
- 2025/11/20 07:05 4 个月前
3、8、17、18、22WA了,输出结果大于标准答案
CPP
#include<cstdio>
int a,b,c,d,e,f,i,m,n,j,k,x[2000][10]={0},w[2000][300][20]={0},z[2000][2000]={0};
int main()
{
scanf("%d",&a);
for(n=1;n<=a;n++)
{
scanf("%d",&b);
for(i=1;i<=b;i++)
{
scanf("%d%d",&x[i][1],&x[i][2]);
}
for(i=1;i<=b;i++)
{
for(m=1;m<=b;m++)
{
z[i][m]=(x[i][1]|x[m][1])-(x[i][1]&x[m][1]);
}
}
c=1;
x[0][3]=1;
for(i=1;i<=7;i++)
{
c*=2;
x[i][3]=c;
}
for(i=0;i<=b+1;i++)
{
for(m=0;m<=280;m++)
{
for(j=1;j<=18;j++)
{
w[i][m][j]=9999999;
}
}
}
w[1][0][9]=0;
for(i=1;i<=b;i++)
{
for(m=0;m<c;m++)
{
for(j=-8;j<=7;j++)
{
if(w[i][m][j+10]<9999999)
{
if((m&1)==1)
{
d=w[i][m][j+10];
if(w[i+1][m/2][j+9]>d) w[i+1][m/2][j+9]=d;
}
else
{
d=9999999;
for(k=0;k<=7&&i+k<=b;k++)
{
if((m&x[k][3])==0)
{
if(i+k>d) k=10;
else
{
if(d>i+k+x[i+k][2]) d=i+k+x[i+k][2];
e=w[i][m][j+10]+z[i+j][i+k];
if(w[i][m|x[k][3]][k+10]>e) w[i][m|x[k][3]][k+10]=e;
}
}
}
}
}
}
}
}
d=9999999;
for(i=-8;i<=0;i++)
{
if(d>w[b+1][0][i+10]) d=w[b+1][0][i+10];
}
printf("%d\n",d);
}
}
>
回复
共 1 条回复,欢迎继续交流。
正在加载回复...