求助,WA60pts
查看原帖
求助,WA60pts
400269
Jorisy楼主2022/6/12 08:40

WA on #4,9,10,13,15,17,18,20

似乎都是答案过小

code:

#include<bits/stdc++.h>
using namespace std;

const int PTS[15][15]={{6,6,6,6,6,6,6,6,6},
                       {6,7,7,7,7,7,7,7,6},
					   {6,7,8,8,8,8,8,7,6},
					   {6,7,8,9,9,9,8,7,6},
					   {6,7,8,9,10,9,8,7,6},
					   {6,7,8,9,9,9,8,7,6},
					   {6,7,8,8,8,8,8,7,6},
					   {6,7,7,7,7,7,7,7,6},
					   {6,6,6,6,6,6,6,6,6}};
struct node{
	int s,h;
}zr[15];
int a[15][15],ans=-1;
bool h[15][15],l[15][15],g[15][15];

bool cmp(node x,node y)
{
	return x.s<y.s;
}

void dfs(int now,int x,int y,int s)
{
    if(a[x][y])
    {
        if(now==9&&y==9)
        {
        	//for(int i=1;i<=9;i++){for(int j=1;j<=9;j++)cerr<<a[i][j]<<' ';cerr<<endl;}cerr<<endl;
        	ans=max(ans,s+a[x][y]*PTS[x-1][y-1]);
    		return;
		}
        if(y==9) dfs(now+1,zr[now+1].h,1,s+a[x][y]*PTS[x-1][y-1]);
        else dfs(now,x,y+1,s+a[x][y]*PTS[x-1][y-1]);
    }
    else
    {
        for(int i=1;i<=9;i++)
        {
            if(!h[x][i]&&!l[y][i]&&!g[(x-1)/3*3+(y-1)/3+1][i])
            {
                a[x][y]=i;
                h[x][i]=l[y][i]=g[(x-1)/3*3+(y-1)/3+1][i]=1;
                if(now==9&&y==9)
                {
                	//for(int i=1;i<=9;i++){for(int j=1;j<=9;j++)cerr<<a[i][j]<<' ';cerr<<endl;}cerr<<endl;
                	ans=max(ans,s+a[x][y]*PTS[x-1][y-1]);
    				return;
				}
                if(y==9) dfs(now+1,zr[now+1].h,1,s+a[x][y]*PTS[x-1][y-1]);
				else dfs(now,x,y+1,s+a[x][y]*PTS[x-1][y-1]);
                a[x][y]=h[x][i]=l[y][i]=g[(x-1)/3*3+(y-1)/3+1][i]=0;
            }
        }
    }
}

int main()
{
    for(int i=1;i<=9;i++)
    {
    	int s=0;
        for(int j=1;j<=9;j++)
        {
            cin>>a[i][j];
            s+=!a[i][j];
            if(a[i][j]) h[i][a[i][j]]=l[j][a[i][j]]=g[(i-1)/3*3+(j-1)/3+1][a[i][j]]=1;
        }
        zr[i].h=i;
        zr[i].s=s;
    }
    sort(zr+1,zr+10,cmp);
    //for(int i=1;i<=9;i++) cerr<<zr[i].h<<' '<<zr[i].s<<endl;cerr<<endl;
    dfs(1,zr[1].h,1,0);
    cout<<ans;
    return 0;
}
2022/6/12 08:40
加载中...