2016藍橋杯省賽第七題剪郵票
剪郵票
這是本人第一次寫部落格,希望大家多多支援!
如【圖1.jpg】, 有12張連在一起的12生肖的郵票。
現在你要從中剪下5張來,要求必須是連著的。(僅僅連線一個角不算相連)
比如,【圖2.jpg】,【圖3.jpg】中,粉紅色所示部分就是合格的剪取。
請你計算,一共有多少種不同的剪取方法。
請填寫表示方案數目的整數。
注意:你提交的應該是一個整數,不要填寫任何多餘的內容或說明性文字。
答案:116
思路:本來一開始準備用全排列做的,結果發現嚴重超時,轉而思考dfs,也就是用最標準的dfs模板,但是要注意的一個點是邊界的處理,所以我們把1到12換成了1,2,3,4,6,7,8,9,11,12,13,14,便於處理,上程式碼:
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
int num[20];
int vis[20];
int temp[]={1,2,3,4,6,7,8,9,11,12,13,14};//這一步至關重要
int step[4]={-5,-1,1,5};
int ans;
void dfs(int index)
{
if(index==5){
int flag1=1;
int flag2=0;
for(int i=0;i<5;i++){
if(vis[num[i]-1]==0&&vis[num[i]+1]==0&&vis[num[i]-5]==0&&vis[num[i]+5]==0){
flag1=0;
}
}
int count=0;
for(int i=0;i<5;i++){
for(int j=0;j<4;j++){
if(vis[num[i]-step[j]]==1){
count+=1;
}
}
}
if(count>6){
flag2=1;
}
if(flag1==1&&flag2==1){
ans+=1;
}
return;
}
for(int i=0;i<12;i++){
if(vis[temp[i]]==0){
num[index]=temp[i];
vis[temp[i]]=1;
dfs(index+1);
vis[temp[i]]=0;
}
}
}
int main(){
ans=0;
memset(vis,0,sizeof(vis));
dfs(0);
cout << ans/120 << endl;
return 0;
}
如有錯誤,歡迎批評指正!
相關文章
- 藍橋杯省賽真題2013題解
- [藍橋杯][2016年第七屆真題]冰雹數
- 2016年省賽第七屆藍橋杯B組C/C++第九題解 交換瓶子C++
- 2016年藍橋杯C/C++組省賽第三題--湊算式C++
- 2016年藍橋杯C/C++組省賽第四題--快速排序C++排序
- 藍橋杯__省賽__第七屆__C/C++__大學A組C++
- 2016年藍橋杯C/C++組省賽第一題--煤球數目C++
- 2016年藍橋杯C/C++組省賽第二題--生日蠟燭C++
- 2018藍橋杯省賽B組
- 2017省賽藍橋杯B組
- 藍橋杯 剪格子
- 藍橋杯第五屆省賽題目及題解
- 2017藍橋杯省賽第十題:k倍區間
- 第十三屆藍橋杯省賽A組
- 1303: [藍橋杯2016決賽]路徑之謎
- 【題解】爬山 藍橋杯2024省B
- 藍橋杯歷年(省賽)試題彙總及試題詳解
- 2015年藍橋杯六屆省賽大學B組真題
- 2020藍橋杯省賽B組C++(第二場)真題C++
- 第六屆藍橋杯省賽CC++B組C++
- 第九屆藍橋杯省賽C++A組 倍數問題(dfs)C++
- 2015藍橋杯省賽javaA組-----牌型種數(填空)Java
- 第九屆藍橋杯B組省賽———乘積最大
- 歷屆藍橋杯省賽(C、C++)的答案(轉)C++
- 藍橋杯真題之錯誤票據
- 【藍橋杯考前突擊】第十屆藍橋杯省賽C/C++大學B組 試題 D 數的分解C++
- 第十五屆藍橋杯軟體賽省賽C/C++B 組題解C++
- 第十三屆藍橋杯省賽C/C++ B組C++
- 藍橋杯__省賽__第八屆__C/C++__大學A組C++
- 藍橋杯__省賽__第九屆__C/C++__大學A組C++
- 藍橋杯真題
- 藍橋杯javaB組備賽Java
- 2013第四屆藍橋杯省賽C++A組【第一題:高斯日記】C++
- 第九屆藍橋杯軟體類省賽 Java B組 題目及解析Java
- 2018年第九屆藍橋杯省賽試題及詳解(Java本科A組)Java
- P8687 [藍橋杯 2019 省 A] 糖果
- 第十一屆藍橋杯省賽CC++組第二場比賽C++
- 【藍橋杯】試題 歷屆試題 剪格子(python解法+java解法)PythonJava