日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

洛谷P1074:靶形数独(搜索、剪枝)

發(fā)布時(shí)間:2023/12/3 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 洛谷P1074:靶形数独(搜索、剪枝) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

解析

搜索題都是玄學(xué)

本題暴搜人人都會(huì)寫,關(guān)鍵是如何剪枝
我一直在最優(yōu)性剪枝上糾結(jié)qwq
但仔細(xì)想想,不同方案的權(quán)值差別沒有那么大
再加上剪枝時(shí)不可避免的要放棄一些準(zhǔn)確度
所以最優(yōu)性剪枝在本題可能確實(shí)沒有太大的作用

考慮我們平時(shí)如何玩數(shù)獨(dú)
肯定是先從東西少的地方開始搜啦!
然后放到代碼上試試…
誒?怎么切了?

我們理性的分析一下
可能有一些各自由于自己行已經(jīng)填的東西所以幾乎已經(jīng)確定了
然而如果先搜其他行可能會(huì)在一個(gè)與本來可以確定的地方矛盾的搜索樹上走的太深
所以我們先確定能確定的再搞剩下的會(huì)大大加速

代碼

#include<bits/stdc++.h> using namespace std; #define ll long long #define debug(a,b) fprintf(stderr,a,b) const int N=1e5+100; const int M=2e5+100; const int mod=998244353; const double eps=1e-8; inline ll read(){ll x=0,f=1;char c=getchar();while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f; } int a[11][11] = {{0,0,0,0,0,0,0,0,0,0,0},{0,6,6,6,6,6,6,6,6,6,0},{0,6,7,7,7,7,7,7,7,6,0},{0,6,7,8,8,8,8,8,7,6,0},{0,6,7,8,9,9,9,8,7,6,0},{0,6,7,8,9,10,9,8,7,6,0},{0,6,7,8,9,9,9,8,7,6,0},{0,6,7,8,8,8,8,8,7,6,0},{0,6,7,7,7,7,7,7,7,6,0},{0,6,6,6,6,6,6,6,6,6,0},{0,0,0,0,0,0,0,0,0,0,0} }; bool hang[10][10],lie[10][10],d[10][10],num[10]; int mp[10][10],tot; #define bel(a,b) ((a-1)/3*3+(b-1)/3+1) int now,ans; struct node{int x,num; }p[10]; bool cmp(node a,node b){return a.num>b.num;} int id[10][10],cnt[10]; void dfs(int k,int x,int o){if(k>9){ans=max(ans,now);return;}if(o>cnt[x]){dfs(k+1,p[k+1].x,1);return;}int y=id[x][o];for(int i=1;i<=9;i++){if(hang[x][i]||lie[y][i]||d[bel(x,y)][i]) continue;hang[x][i]=lie[y][i]=d[bel(x,y)][i]=1;now+=i*a[x][y];dfs(k,x,o+1);hang[x][i]=lie[y][i]=d[bel(x,y)][i]=0;now-=i*a[x][y];}return; } int main(){ #ifndef ONLINE_JUDGEfreopen("a.in","r",stdin);freopen("a.out","w",stdout); #endif//start=clock();for(int i=1;i<=9;i++){p[i].x=i;for(int j=1;j<=9;j++){int o=read();mp[i][j]=o;if(o){hang[i][o]=lie[j][o]=d[bel(i,j)][o]=1;now+=o*a[i][j];p[i].num++; }else id[i][++cnt[i]]=j;}}sort(p+1,p+1+9,cmp);dfs(1,p[1].x,1);printf("%d\n",ans?ans:-1);return 0; } //2025

總結(jié)

以上是生活随笔為你收集整理的洛谷P1074:靶形数独(搜索、剪枝)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。