樣例輸入:
1樣例輸出: 資料範圍:1 2 0
2 1 2
3 3 3 3
4 4 4 4 4
5 5 5 5 5 5
對於50%的資料,保證十步及以內有解;
對於70%的資料,保證沒有太難了的情況;
對於70%的資料,t≤10;
資料有梯度。
題目分析:
這道題很明顯是一道搜尋題,a*剪枝就可以了。加乙個迭代加深也是沒有問題的。下附**的a*剪枝用的是dfs,但實際上bfs時間才是更優的,但是因為bfs相對難寫需要記錄狀態且空間上有可能會爆(不太確定)。
附**:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
const
int fx[5]=;
const
int fy[5]=;
const
int bz[7][7]=;
int t,a[7][7],minn,pox,poy;
bool check;
int readint()
for(;ch>='0'&&ch<='9';ch=getchar()) i=(i<<3)+(i<<1)+ch-'0';
return i*f;
}int pd()//估價函式,有ret個位置不同,則至少需要ret-1步
void dfs(int x,int y,int num)
if(num+bs>minn) return;
if(x>minn-num) return;
for(int i=1;i<=4;i++)
}}int main()
dfs(pox,poy,0);
if(check==true) printf("%d\n",minn);
else
printf("too difficult\n");
}return
0;}
NOIP2016提高組模擬 積木
比賽的時候用了個神奇的小暴力,本來打算拿40分,沒想到暴力出奇蹟,隨機資料下表現優良,居然碾過去了。暴力方法不講,只貼 僅供對拍。正解顯然要用狀態壓縮 看資料範圍 設fs i,0 1 2 s表示當前已選擇的積木集合,i表示在最上方的積木編號,0 1 2表示最上方的積木哪面朝上。轉移方程容易推導。暴力...
小LK玩積木
時間限制 1 sec 記憶體限制 128 mb 2級機械人 1級機械人 0級機械人 ab,其中第1個關節是a,第2個關節是b 3級機械人 2級機械人 1級機械人 aba,其中第1個關節是a,第2個關節是b,第3個關節是a 4級機械人 3級機械人 2級機械人 abaab 其中第1個關節是a,第2個關節...
NOIP2016提高A組模擬9 2 積木
給你一些方塊,給出每個方塊的長寬高,可以以任意一面為底面,用任意的順序選擇任意一些方塊,下面的方塊一定要完全包含上面的方塊 下面方塊的長,寬分別小於上面方塊的長寬 求最高的搭出積木的高度 看到這個資料範圍,就想到狀壓dp,狀態也是很好設的,我們設f s,i,j,k 表示當前方塊的選取狀態為s,當前在...