社区讨论

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 条回复,欢迎继续交流。

正在加载回复...