DFS+剪枝!!!!
!
这是继上一个,做的加难的一个。难了一点点!
!
非常幸运0MS过!!
AC代码例如以下:
///dfs+剪枝 0MS 236K#include#include #include #include using namespace std;int n;int a[100];int vis[100];int l,c;bool cmp(int a,int b){ return a>b;}int dfs(int v,int cur,int bg){ int i; if(cur==c) return 1; for(i=bg;i
!。 i++; } return 0; } int main() { int i; while(~scanf("%d",&n)&&n) { int sum=0; for(i=0;i<n;i++) { scanf("%d",&a[i]); sum+=a[i]; } sort(a,a+n,cmp); memset(vis,0,sizeof vis); for(i=a[0];i<=sum;i++) { if(sum%i==0) { l=i; c=sum/i; if(dfs(0,0,0)) break; } } printf("%d\n",i); } return 0; }