codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include<cstdio> #include<iostream> #include<sstream> #include<cmath> #include<cstring> #include<cstdlib> #include<cassert> #include<ctime> #include<algorithm> #include<iterator> #include<iostream> #include<cctype> #include<string> #include<vector> #include<map> #include<set> #include<queue> #include<list> using namespace std; const int N=7; int done[1<<12],gdo2[1<<12]; const int INF=1000000; int g(int mask,int lvl){ assert(mask<(1<<N)); printf("MASK=%d\n",mask); if(gdo2[mask]) return gdo2[mask]; if(lvl==N){ if(done[mask]) return INF; return mask; } int ans=INF,i; if(done[mask]==0) ans=mask; for(i=0;i<N;i++) if((mask&(1<<i))){ ans=min(ans,min(g(mask^(1<<i) ,lvl+1),g(mask,lvl+1))); } return gdo2[mask]=ans; } int main(){ done[0]=done[1]=done[3]=done[2]=done[6]=done[4]=done[5]=done[7]=done[15]=1; cout <<g(15,0)<<endl; return 0; }
Private
[
?
]
Run code