題解:
練**功底的題目
首先思路嘛很顯然 spfa+狀壓dp(你要說爆搜也可以)
令f[i][j][s][k]表示當前在i,j,蛇的形狀為s,然後吃到的狀態是k
然後呢細節一大堆
首先空間就是個問題
12*12*2^12*2^4
(為什麼是2^14次方呢 因為可以記錄相鄰之間的關係有4種,然後最多要記錄6個,我**裡寫的是7個。。最後一次的那個是不用記得)
然後還要輸出方案 如果是記6個的話應該可以隨便開
如果記7個的話 那就搞乙個int記錄前面蛇的狀態,兩個bool記錄蛇的位置(因為只有1-4)
然後顏色是要當時算的
這樣勉強512mb卡過去。。
時間上嘛理論是(x=12*12*2^12*2^4) xlogx的
但因為挺多狀態是冗餘的 應該是夠得。。
然後我覺得洛谷上的評測可能是單一答案麼。。。 所以只拿了no solution的分
以後再看看。。
**:
#include usingnamespace
std;
#define maxn1 16390
#define maxn2 15
int dp[13][13][maxn1][maxn2],w[16][16],ft[16][16
];int pre[13][13
][maxn1][maxn2];
bool pre2[3][13][13
][maxn1][maxn2];
bool ff[16][16
][maxn1][maxn2];
int dx[5]=;
int dy[5]=;
intn,m,k;
int jl[1000000
];struct
re;queue
q;int js(int x,int y,int x1,int
y1)int query(int
x)bool pd(re tmp,int
i)
return(true);}
re js2(re tmp,
inti)
;
return
(x3);
}int now=tmp.c,cnt=0,len=query(tmp.d);
for (int j=1;j)
re x3=;
return
(x3);
}char c[100
];#define inf 1e9
intmain()
intx,y,x2,y2;
cin>>x>>y; x2=x; y2=y; int tmp=0
;
for (int i=1;i<=3;i++)
memset(dp,-1,sizeof
(dp));
dp[x2][y2][tmp][
0]=0
; pre[x2][y2][tmp][
0]=-1
; re x4=; q.push(x4);
cin>>k;
for (int i=1;i<=k;i++)
int goal=(1
<1
; memset(ff,
1,sizeof
(ff));
int ans=inf,xans,yans,zans,eans=goal;
while (!q.empty())
;if (r.b!=goal&&ff[x.a+dx[i]][x.b+dy[i]][r.a][r.b])
if (r.b==goal&&dp[x.a+dx[i]][x.b+dy[i]][r.a][r.b]}
}ff[x.a][x.b][x.c][x.d]=1
; }
int cnt=0
;
if (ans==inf) cout<<"
no solution.";
else
for (int i=cnt;i;i--)
}return0;
}
貪食蛇程式
define n 200 include include include define left 0x4b00 define right 0x4d00 define down 0x5000 define up 0x4800 define esc 0x011b int i,key int score ...
貪食蛇設計
為什麼叫能走蛇 當我剛知道自己要寫一條這樣的蛇時,我的心情是十分複雜的,之所以叫這個名字,是因為這條蛇只有乙個功能,即聽從玩家的命令,在迷宮內四處走動。怎麼寫出能走蛇 那這條靈活 其實很笨拙 的蛇是如何誕生出世的呢?先寫乙個總控偽 出來,採用自頂向下的思想,一步一步解決具體檔案。頭部如下 一點小總結...
貪食蛇的程式
無聊,分析了乙個用c語言寫的貪食蛇的程式。寫的非常簡練,就是函式的名字起得不是很好。include include define kuan 20 地圖的大小 int iz kuan kuan 地圖 struct jiedian 蛇的結點位置,使用鍊錶結構來儲存蛇身上各結點的位置 point ptsh...