社区讨论

求解释

P1120[CERC 1995] 小木棍参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@mi4eex4z
此快照首次捕获于
2025/11/18 17:56
4 个月前
此快照最后确认于
2025/11/18 17:56
4 个月前
查看原帖
为毛系统说编译错误却不给我原因?那位大神帮忙看一下:
CPP
#include<stdio.h>
int cd[70];
int n;
int k=1;
int sum=0;
int ky[70];
int f;
int mem[1010][1010][51]={1};
void kp(int l, int r)
{
    if (l < r)
    {
        int i = l, j = r, x = cd[l];
        while (i < j)
        {
            while(i < j && cd[j] >= x)
                j--;
            if(i < j)
                cd[i++] = cd[j];
            while(i < j && cd[i] < x)
                i++;
            if(i < j)
                cd[j--] =cd[i];
        }  
        cd[i] = x;
        kp(l,i-1);
        kp(i+1,r);
    }  
}  
void dfs(int m,int l,int t)
{
    int i;
    if(t==0)
    {
        if(m==172)
        m=86;
        printf("%d",m);
        f=1;
        return;
    }    
    if(f==1)
        return;
    if(l<0)
        return;
    if(mem[m][l][t]==1)
        return;
    mem[m][l][t]=1;
    if(l==0)
    {
        dfs(m,m,t-1);
    }
    for(i=k;i>=1;i--)
    {
        if(ky[i]==0)
        { 
            ky[i]=1;
            dfs(m,l-cd[i],t);
            ky[i]=0;
        }
    }
}
int main()
{
    int i;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&cd[k]);
        if(cd[k]<=50)
            k++;
    }
    k--;
    kp(1,k);
    for(i=1;i<=k;i++)
        sum+=cd[i];
    for(i=cd[k];i<=sum;i++)
        if(!(sum%i))
            dfs(i,i,sum/i);
    return 0;
}

回复

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

正在加载回复...