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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hdu 4090(搜索+可行性剪枝)

發(fā)布時(shí)間:2025/3/16 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hdu 4090(搜索+可行性剪枝) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

解題思路:這道題一開始我想用bfs,但這道題我感覺難的是每次消除后,怎么往下往左移動(dòng)。此外還有就是要剪枝,不然是過不了的,可采用可行性剪枝,即當(dāng)前的得分加上當(dāng)前狀態(tài)下可能得到的最大分,如果還不能夠達(dá)到最優(yōu),那么就要剪枝。這道題看似不難,但有很多細(xì)節(jié)要處理。


這里參考了別人的代碼,很多都是用dfs+剪枝。。關(guān)鍵還是位置移動(dòng)的部分沒有完全弄明白。。。



#include<iostream> #include<string.h> #include<queue> using namespace std; int n,m,k; int g[10][10]; int best; int total; int h[8]={1,-1,0,0,1,1,-1,-1}; int gg[8]={0,0,1,-1,1,-1,1,-1};int maxsum(){//計(jì)算此狀態(tài)的最大獲利(是一個(gè)剪枝)int res[10]={0},i,j;for(i=1;i<=n;i++)for(j=1;j<=m;j++)if(g[i][j])res[g[i][j]]++;int s=0;for(i=1;i<=k;i++)s+=res[i]*res[i];return s; }void calsum(int u,int v,bool visit[10][10],int s){//DFS搜與某一點(diǎn)相鄰的所有點(diǎn)int xx,yy,i;visit[u][v]=true;g[u][v]=0;total++;for(i=0;i<8;i++){xx=u+h[i];yy=v+gg[i];if(xx<=0 || xx>n || yy<=0 || yy>m)continue;if(!g[xx][yy] || visit[xx][yy])continue;if(g[xx][yy]!=s)continue;calsum(xx,yy,visit,s);} }void change(){//根據(jù)題目要求需要沒消一次方塊就下移左移int k=n,i,j;bool flag[10]={0};for(i=1;i<=m;i++){k=n;for(j=n;j>=1;j--){g[k][i]=g[j][i];if(j<k)g[j][i]=0;if(g[k][i]){k--;flag[i]=true;}}}k=1;for(i=1;i<=m;i++){if(flag[i]){if(i>k){for(j=1;j<=n;j++){g[j][k]=g[j][i];g[j][i]=0;}}k++;}} }void dfs(int now){//主搜函數(shù)bool visit[10][10];int i,j,p,q;int tem[10][10];if(maxsum()+now<=best)return;memcpy(tem,g,sizeof(tem));if(best<now)best=now;memset(visit,0,sizeof(visit));for(i=1;i<=n;i++)for(j=1;j<=m;j++){memcpy(g,tem,sizeof(g));total=0;if(g[i][j] && !visit[i][j]){ calsum(i,j,visit,g[i][j]);}if(total<3)continue;change();dfs(now+total*total);} }int main(){int i,j;while(scanf("%d %d %d",&n,&m,&k)==3){for(i=1;i<=n;i++)for(j=1;j<=m;j++){scanf("%d",&g[i][j]);}best=0;dfs(0);printf("%d\n",best);} }

總結(jié)

以上是生活随笔為你收集整理的hdu 4090(搜索+可行性剪枝)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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