Dividing(1)
http://acm.pku.edu.cn/JudgeOnline/problem?id=1014
随分昔にやった問題ということと、他に誰もやっていなくて全く競争してないという理由で、相当短縮できるのではないかと判断しました。一応手元にあるコードを晒しておきますが、自分で考えて書いたほうが良さげなかんじです^^;
i,t,k,d[]; f(n,x,b){ b=fmin(d[--x],n/x); for(k=n+b*~x?k:1;x*~b;)f(n+b--*~x,x); } main(s){ for(k=i=s=0;i<6;s+=(d[i]%=30)*++i) scanf("%d",d+i); f(s/2,6); s&&main(printf("Collection #%d:\nCan%s be divided.\n\n",++t,s%2|!k?"'t":"")); }
さっき、目に付くところだけざざっと削りましたが、ぱっと見が変数多いし汚い。ということはもっともっと縮むんじゃないかなーと思います。今までの最短コードを見るかぎり、mainの再帰で短くなる事は稀だし。。