時間限制: 1 s
空間限制: 128000 kb
題目等級 : ** gold
在乙個4*4的棋盤上擺放了14顆棋子,其中有7顆白色棋子,7顆黑色棋子,有兩個空白地帶,任何一顆黑白棋子都可以向上下左右四個方向移動到相鄰的空格,這叫行棋一步,黑白雙方交替走棋,任意一方可以先走,如果某個時刻使得任意一種顏色的棋子形成四個一線(包括斜線),這樣的狀態為目標棋局。●○
●○●○
●●○●
○○●○
輸入描述 input description
從檔案中讀入乙個4*4的初始棋局,黑棋子用b表示,白棋子用w表示,空格地帶用o表示。
輸出描述 output description
用最少的步數移動到目標棋局的步數。
樣例輸入 sample input
bwbo
wbwb
bwbw
wbwo
樣例輸出 sample output
1#define n 5
2 #include3
using
namespace
std;
4 #include5
char
jz[n][n];
6struct
qq[2];9
int xx=;
10int yy=;
11long
long sum=100;/*
假設乙個最大步數,一開始設定太大了,直接爆了棧空間
*/12
int t=-1;13
bool
check()14
26}27if(biaozhi) return
true;28
}29for(int i=1;i<=4;++i)30
40}41if(biaozhi) return
true;42
}43bool biaozhi=true;44
char s=jz[1][1
];45
for(int i=2;i<=4;++i)
4652}53
if(biaozhi) return
true
;54 biaozhi=true
;55 s=jz[1][4
];56
for(int i=2;i<=4;++i)
5763}64
if(biaozhi) return
true;65
return
false;66
}67void dfs(bool fla,long
long
bushu)
6875
for(int i=0;i<2;++i)
7692
if(!fla&&jz[x1][y1]=='b'
)93102}
103}
104}
105}
106int
main()
107118
}119
}120
//swap(q[0],q[1]);
121bool flag=;
122for(int j=0;j<2;++j)
123 dfs(flag[j],0
);124 cout125return0;
126 }
2023年noip全國聯賽普及組
時間限制: 1 s
空間限制: 128000 kb
題目等級 : ** gold
已知 n 個整數 x1,x2,…,xn,以及乙個整數 k(k<n)。從 n 個整數中任選 k 個整數相加,可分別得到一系列的和。例如當 n=4,k=3,4 個整數分別為 3,7,12,19 時,可得全部的組合與它們的和為:
3+7+12=22 3+7+19=29 7+12+19=38 3+12+19=34。
現在,要求你計算出和為素數共有多少種。
例如上例,只有一種的和為素數:3+7+19=29)。
輸入描述 input description
鍵盤輸入,格式為:
n , k (1<=n<=20,k<n)
x1,x2,…,xn (1<=xi<=5000000)
輸出描述 output description
螢幕輸出,格式為:
乙個整數(滿足條件的種數)。
樣例輸入 sample input
4 33 7 12 19
樣例輸出 sample output
資料範圍及提示 data size & hint
(1<=n<=20,k<n)
(1<=xi<=5000000)
1/*順便複習miller_rabin演算法*/2
#define n 21
3 #include4
using
namespace
std;
5 #include6 #include7 #include8 typedef long
long
ll;9
inta[n],n,k;
10 ll ans=0;11
void
input()
1217
ll quick_mod(ll a,ll b,ll c)
1828 a=(a*a)%c;
29 b>>=1;30
}31return
ans;32}
33bool
miller_rabin(ll n)
3443
for(ll i=1;i<=10;++i)
4454
if(x!=1) return
false;55
}56return
true;57
}58void
dfs(ll xh,ll sum,ll djg)
5966
if(n-xhreturn;67
for(ll i=1;i<=n;++i)
6872}73
intmain()
7481 cout82return0;
83 }
時間限制: 1 s
空間限制: 128000 kb
題目等級 : ** gold
輸入描述 input description
輸入的第一行包含2個整數n(1≤n
≤8),m(1≤m
≤10)。表示有n種不同型別的本子和m種小寒喜歡的顏色。接下來乙個n*m的矩陣。第i行第j列的整數aij表示在第i種型別的本子中包含小寒喜歡的顏色j的紙有aij(1≤aij
≤100)張。再接下來的一排n個整數b1到bn,表示每種顏色的本子在超市中有多少本(1≤bi
≤5)。
輸出描述 output description
輸出包含乙個整數,表示小松最少需要折的蝴蝶數目,如果該數目超過1000,則輸出」alternative!」。(由於可能存在多種買本子的方案,所以這裡就不要求輸出具體方案了)
樣例輸入 sample input
2 32 1 2
4 8 4
5 5樣例輸出 sample output
1#define n 11
2 #include3
using
namespace
std;
4 #include5
intb[n],jz[n][n],n,m,a[n];
6int flag=false;7
void
input()816
bool check(int
xz)17
22void dfs(int k,int
xz)23
29if(k==n) return;30
for(int i=k+1;i<=n;++i)
3144}45
if(fla)
4651
dfs(i,xz);
52if(flag) return
; 53
for(j=1;j<=m;++j)
5457}58
}59}60
intmain()
6181}82
if(fla)
8388
dfs(i,k);
89for(j=1;j<=m;++j)
9093}94
}95if(k*m>1000)96
100if(flag) break
;101
}102 printf("
%d\n
",m*k);
103return0;
104 }
DFS深度優先搜尋練習
題意 用 代表油田,八個方向互相連線,把相連的油田看作一塊油田,問你最多有多少塊油田。思路 本題其實本質就是乙個迷宮問題,所以我們就可以用dfs或者bfs,本題我們當然採用dfs,用乙個vis標記一下,然後從頭開始遍歷,如果這個點等於 並且vis為0時,開始bfs一次,記錄bfs的次數,bfs的次數...
廣度優先搜尋 深度優先搜尋
前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...
廣度優先搜尋,深度優先搜尋
深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...