Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
写了一上午i555#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #include<cmath> using namespace std; int n; int a[10000]; int b[10000]; int c[10000]; int v[60]; int d[60]; int ans; int dis; int now; void dfs(int l) { if(l==n+1) { dis=1; for(int i=1;i<=now;i++) if(b[i]!=-1)dis=0; return; } if(d[a[l]]==0) { dfs(l+1); return; } int flat=0; for(int i=1;i<=now;i++) { if(b[i]!=-1&&a[l]!=b[i]) { int q=a[l]-b[i]; if(b[i]-q>=0)continue; int dis2=0; for(int j=a[l]+q;j<=59;j+=q) { if(d[j]==0) { dis2=1; break; } } if(dis2==0) { for(int j=a[l];j<=59;j+=q) d[j]--; int w=b[i]; b[i]=-1; dfs(l+1); b[i]=w; for(int j=a[l];j<=59;j+=q) d[j]++; } } } if(a[l]<=29&&now+1<=ans) { now++; b[now]=a[l]; d[a[l]]--; dfs(l+1); d[a[l]]++; b[now]=0; now--; } return ; } int main() { cin>>n; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); v[a[i]]++; } //sort(a+1,a+1+n); for(ans=1;ans<=17;ans++) { for(int i=0;i<=59;i++) d[i]=v[i]; memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); now=0; dfs(1); if(dis)break; } if(ans==18)ans--; cout<<ans<<'\n'; return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator