藍橋杯真題 剪郵票 題解

2021-08-16 10:43:07 字數 2318 閱讀 1960

題目:

如【圖1.jpg】, 有12張連在一起的12生肖的郵票。

現在你要從中剪下5張來,要求必須是連著的。 (僅僅連線乙個角不算相連)

比如,【圖2.jpg】,【圖3.jpg】中,粉紅色所示部分就是合格的剪取。

正確答案在下面!!

(錯誤答案大神們請無視….)

wrong answer:

錯因:這道題是不能邊用dfs邊判斷,

比如圖3的情況就不能考慮到:第2行第1列的格仔可以選,

但是我寫的**裡面就不能選,因為它的上面和左面的格仔都沒有被選過

而且!!我一開始的判斷**是錯的,因為我判斷了它左上角和右上角的格仔,大概是判斷**寫習慣了

搞了好幾天才終於知道錯誤原因,( ! ^ ! )

//剪郵票

//wrong answer

#include

using

namespace

std;

int cnt = 0;

bool selected[5][5];

int row,col,num;//num:要剪下來的個數

bool alright(int x, int y,int cur)

//左面

if(yy >= 1)

return

false;

/*wrong answer

for(int dx = -1; dx <= 1; ++dx)}}

return false;

*/}void dfs(int x, int y,int cur)

if(cur < num && x > row) return ;

//選if(alright(x, y,cur))

//不選

selected[x][y] = false;

if(y == col) dfs(x + 1, 1, cur);

else dfs(x, y + 1, cur);

}int main()

}dfs(1,1,0);

cout

0;}

思路:

用dfs;遞迴深度為格仔數(3 * 4 = 12),每個格仔有兩種可能的選擇:選or不選,遞迴出口為已選擇的格仔數為5;應該是選完5個格仔後再判斷是否滿足上下左右相鄰的條件,不能邊選邊判斷;判斷1個連通塊包含的格仔數用普通遞迴ordfs(這裡我用的普通的遞迴)

ps:除錯是個好東西!輸出結果出錯時在dfs裡面多用下輸出除錯看看哪步出錯

答案:116

code:

//剪郵票  答案:116 

#include

using

namespace

std;

int cnt = 0;

int selected[5][5];

int row,col,num;//num:要剪下來的個數

bool vis[5][5];

int unitcnt = 0;

int move[4][2] = , ,, };

int getsum(int x, int y)

void dfs(int x, int y,int cur)

}if(flag) break;

}for(int k = 1; k <= row; ++k)

}// cout<

return ;

}if(cur < num && x > row) return ;

//選

selected[x][y] = 1;

if( y == col) dfs(x + 1,1,cur + 1);

else dfs(x, y + 1, cur + 1);

selected[x][y] = 0;

//不選

selected[x][y] = 0;

if(y == col) dfs(x + 1, 1, cur);

else dfs(x, y + 1, cur);

}int main()

}dfs(1,1,0);

cout

0;}

藍橋杯 剪郵票

剪郵票如 圖1.jpg 有12張連在一起的12生肖的郵票。現在你要從中剪下5張來,要求必須是連著的。僅僅連線乙個角不算相連 比如,圖2.jpg 圖3.jpg 中,粉紅色所示部分就是合格的剪取。請你計算,一共有多少種不同的剪取方法。請填寫表示方案數目的整數。注意 你提交的應該是乙個整數,不要填寫任何多...

藍橋杯 剪郵票

這道題,第一眼看知道是從12個數中選擇5個,然後dfs,但是就是不知道怎麼寫才好,看了一些別人寫的,大部分都是用c c 寫的,參考別人的,再自己修改,寫了這樣的,應該算是很好理解的,附上參考的package lanqiaocuprealtest 這裡也和別人的一樣,把數字改過了,5,6,7,8,改為...

藍橋杯 剪郵票

如 圖1.jpg 有12張連在一起的12生肖的郵票。現在你要從中剪下5張來,要求必須是連著的。僅僅連線乙個角不算相連 比如,圖2.jpg 圖3.jpg 中,粉紅色所示部分就是合格的剪取。請你計算,一共有多少種不同的剪取方法。請填寫表示方案數目的整數。注意 你提交的應該是乙個整數,不要填寫任何多餘的內...