好奇怪的遊戲(bfs
#include#include#include#includeusing namespace std;
int x1,x2,y1,y2;
queueqx;
queueqy;
int xx[15] =;
int yy[15] =;
int dis[120][120];
int main()
for(int i=0;i<12;i++)
}} }
return 0;
}
神奇的四次方數
思路:(來自題解。。。
完全揹包固然是正解,但萬一比賽時我們腦子瓦特想不出正解怎麼辦呢?
那就是我們的爆搜出場的時候了!(滑稽)
但是純爆搜顯然是不行的,m<=100000,這個資料範圍很有可能得不了高分甚至爆0,所以我們就要進行一些優化。
首先是剪枝。我們可以用 ans 存下當前的最好答案,如果在搜尋時當前選的數的數量已經大於ans了,那肯定就沒必要找了,這樣是白費力氣。另外,1^4+2^4和2^4+1^4是一樣的,我們用乙個last讓選出的數列變成公升序,同樣可以減少時間消耗。
另外搜的順序非常重要。如果我們從1往上搜,那第乙個選出來的肯定是全1的序列。這種情況我們肯定不想要,希望直接將其剪枝。那麼怎麼操作呢?結合剛才說的,我們可以確定乙個嬌小較小的ans,然後之後的搜尋肯定不會超過這個步數。沒錯,從最大往小的搜可以很好地完成這個任務。如果不這樣的話只會有30分。
#includeusing namespace std;
int n;
int ans=999999;
void dfs(int tot,int k,int last)
int i;
for(i=last;i*i*i*i<=n-tot;) i++;
for(;i>=last;i--)
dfs(tot+i*i*i*i,k+1,i);
}int main()
;int yy[8] = ;
void dfs(int x,int y) }
}int main()
} int ans = 0;
for(int i=1;i<=n;i++)
}} printf("%d\n",ans);
return 0;
}
選數
#include#include#includeusing namespace std;
int ans=0,n,k,x,a[21],num=0;
bool p(int q)
return true;
}void dfs(int x,int y)//定義深搜的函式,y是當前最後選過的數在陣列中的位置,x是當前正在選擇第幾個數,和用num變數儲存
}int main()
字串(bfs
#include#include#includeusing namespace std;
int n,ans;
void dfs(int now,int s,int l) // now 表示0 or 1 s 表示相鄰的個數 l 判斷是否結束
if(s<2) dfs(now,s+1,l+1);
dfs(now^1,1,l+1);
}int main()
去看電影(dfs
#include#include#includeusing namespace std;
int a[20];
bool vis[20];
int n,m,maxx=-1;
void dfs(int k,int ans)
vis[i] = 0;
ans -= a[i];
} }
} int main()
dfs(1,0);
cout《傳球( 搜尋 40分。。。
#include#include#includeusing namespace std;
int n,m,ans = 0;
queueq1,q2;
void bfs()
}int main()
if(n == 0)
return 0;
while(!q.empty())
cout《超級書架2(dfs
#include#includeusing namespace std;
int a[120];
bool vis[120];
int n,m;
int ans = 1e9;
void dfs(int sum)
for(int i=1;i<=n;i++) }
}int main()
dfs(0);
cout《放蘋果(遞迴
這道題其實就是乙個分類討論+遞迴,你可以選擇有乙個盤子乙個蘋果都不放,然後盤子數減1,或者(不可能兩種方案都不選)每個盤子都放乙個蘋果,即蘋果減去盤子的數量,就一直這樣遞迴下去,就得到了最終的答案。注意:有0個蘋果或1個盤子時,只有一種方案,所以(n==0||m==1)return 1,當n<0或m<1時,因為根本不存在這種情況,所以返回乙個0
#include#includeusing namespace std;
int t,n,m;
int solve(int n,int m)
int main()
;int yy[4] = ;
queueqx,qy;
int pd(int x,int y)
void bfs()
} }}int main()
if(a[i][j] == 'd')
}} vis[tx][ty] = 1;
dis[tx][ty] = 0;
qx.push(tx);
qy.push(ty);
bfs();
if(dis[enx][eny] == 1e9)
cout<<"no way!"《海戰(dfs
先預處理判斷是否是不可行的情況,我們由題意可以知道,不可行的情況為兩個船挨在了一起,即存在不是矩形的乙個圖案的情況。我們又可以知道,在乙個 2*2 的矩形中,若在三個地方都是#,那麼就一定存在不是矩形的情況,直接輸出,bad placement.
#include#include#includeusing namespace std;
int a[1010][1010];
bool vis[1010][1010];
int n,m;
int xx[4] = ;
int yy[4] = ;
int pd(int x,int y)
void dfs(int x,int y) }}
int main()
} for(int i=1;i<=n;i++)
catch that cow(改錯改了好久,**!
#include#include#include#includeusing namespace std;
int visit[100005] = ;
int main()
if(t > 0 && !visit[t-1])
if(t < m &&!visit[t+1])
if(t*2 < 100005 && !visit[t*2])
}printf("%d\n",visit[m]);
}return 0;
}
poj 1426(列舉 0 1 字串即可
#include#includeusing namespace std;
long long n;
queueq;
void bfs()
}
51 nod 1109 ( poj 1426 加強版
部落格位址
#include#include#include#includeusing namespace std;
struct node
cur,nxt;
bool v[1000001];
queueq;
int main()
;int yy[4] = ;
struct nodenode[50];
int pd(int x,int y)
void bfs(int x,int y)
t = node[t].nex;
}} for(int i=0;i<4;i++)
} }}
int main()
} bfs(0,0);
return 0;
}
linux cmake(未完,待更新)
參考 栗子 1 project es 2 set cmake build type debug cache string set build type to debug 3 set cmake c compiler g 4 set cmake cxx flags g 5 add compile op...
未完成 POJ搜尋
記錄乙個菜逼的成長。ps 做搜尋時,是選擇深搜還是廣搜又或者結合在一起,真的很重要。bfs 1.給操作,求運算元 2.求最短路徑。poj3414 bfs 題目大意 有兩個容量為a,b的罐,有三種操作 實際上有六種 問能否使得其中的乙個罐裝滿c容量。poj1753 位壓縮 bfs 題目大意 有乙個4 ...
C 面試常考題(未完整 更新中)
1.static用法 在函式名裡定義的static變數,改變它的儲存結構,多次呼叫該函式時,該變數僅被初始化一次 全域性變數與static的靜態變數。改變它的作用域,全域性變數的範圍是整個程式,而static的靜態變數的範圍僅有該模組 2.多型的機制 編繹器會為繼承體系上的每乙個類建立乙個虛函式表,...