#include #include #include #include using namespace std; struct node { int k,l,r,ans,nl,nr,level; node(){}; node(int kk,int ll,int rr,int anss,int nll,int nrr,int le) { k=kk;l=ll;r=rr;ans=anss;level=le;nl=nll;nr=nrr; } friend bool operator<(const node &A,const node &B) { if(A.level==B.level) { return A.ansB.level; } }s,e; bool has[230][15][15][15][15][2]; priority_queueq; int map[20][20],b[20][20][20]; int n,m,k,ans; int x,y,now; void solve() { if(e.k<0||e.k>(n-e.level-1)*(e.nr-e.nl+1)) return; if(has[e.k][e.l][e.r][e.nl][e.nr][1-now]==true) return; q.push(e); has[e.k][e.l][e.r][e.nl][e.nr][1-now]=true; } void bfs(int l) { int i,j; memset(has,0,sizeof(has)); q.push(node(0,0,0,0,0,0,-1)); while(!q.empty()) { s=q.top(); q.pop(); if(s.k==0&&s.ans>ans) ans=s.ans; if(s.level==n-1) continue; if(s.level!=l) { now=1-now; l=s.level; for(i=0;i(n-s.level-1)*(s.nr-s.nl+1)) continue; for(i=s.nl;i<=s.nr;i++) { for(j=i;j<=s.nr;j++) { if(is.nr||js.r) continue; e=s; e.level++; e.l=i; e.r=j; e.k-=(j-i+1); if(i>s.l&&js.l) { e.nl=i; e.nr=s.nr; e.ans+=b[e.level][i][j]; } else if(j