求助:为什么不对
查看原帖
求助:为什么不对
372299
超级玛丽王子楼主2020/9/22 20:51
#include <bits/stdc++.h>
using namespace std;
int a[105],used[105],n,m,len,minn=0,sum=0,bj;
inline bool cmp(int a, int b) {
    return a>b;
}
inline int read() {
    char ch=getchar();
    while(ch<'0'||ch>'9') ch=getchar();
    int x=0;
    while(ch>='0'&&ch<='9') x=x*10+(ch^48),ch=getchar();
    return x;
}
inline int max(int x, int y) {
    return x>y?x:y;
}
inline void dfs(int k, int last, int rest) {
    int i,j;
    if(!(k^m)) {
        bj=1;
        return;
    }
    if(!rest) {
        for(i=1;i<=n;i++) 
            if(!*(used+i)) {
                *(used+i)=1;
                break;
            }
        dfs(k+1,i,len-*(a+i));
    }
    for(i=last+1;i<=n;i++)
        if(!*(used+i)&&rest>=*(a+i)) {
            *(used+i)=1;
            dfs(k,i,rest-*(a+i));
            *(used+i)=0,j=i;
            while(i<n&& !(*(a+i)^*(a+j))) i++;
            if(!(i^n)) return;
        }
}
int main(void) {
	while(~scanf("%d",&n)&&n) {
		memset(a,0,sizeof(a));
		sum=0;
	    for(int i=1;i<=n;i++) *(a+i)=read(),minn=max(minn,*(a+i)),sum+=*(a+i);
	    sort(a+1,a+n+1,cmp);
	    int i,j;
		for(i=minn;i<=sum;i++) 
			if(sum%i==0) {
				memset(used,0,sizeof(used));
				len=i,used[1]=1,bj=0,m=sum/i;
				dfs(1,1,len-a[1]);
				if(bj) {
					printf("%d\n",len);
					break;
				}
			}
	}
	return 0;
}

是不是指针优先级出问题了?

2020/9/22 20:51
加载中...