第二十天 填數問題

2021-10-06 11:47:35 字數 1661 閱讀 3554

今天是釋然發題解的第二十天,以後每一天都會和大家分享學習路上的心得,希望和大家一起進步,一起享受coding的樂趣。

本文約1800字,預計閱讀6分鐘

昨天我們學習了優先佇列,忘記的小夥伴們可以看一下哦:

優先佇列

來自第七屆藍橋杯省賽題目2:

這道題呢,一看就是搜尋,列舉每個數字就和=10,精度太低可以換成乘法:

//先要存放9個數字,計算的時候如果不強制轉化成精度高的話呢可能會有很多重複解法,用vis標記這個數是否用過

int ans=0;

bool vis[10]

;//int dp = [max_n][max_n];

int num[10]

;void

solve()

//index搜尋的是位置,從第0個開始到第8個

void

dfs(

int index)

for(

int i=

1;i<=

9;i++)}

}

//主函式

來自藍橋杯第七屆省賽題目:

這道題呢也是乙個類似的搜尋,格仔我們把不能放的格仔標記成0,可以放的話就標記成1

void

init()

} flag[0]

[0]=

0;flag[2]

[3]=0;}

我們根據剛剛這道題的經驗,我們寫乙個dfs去搜尋所有的可能結果,用另外乙個函式去判斷可不可以算乙個正解,如果符合題目要求,ans++然後回溯

首先是搜尋

void

dfs(

int index)

if(flag[x]

[y])}}

else

dfs(index+1)

;}

void

solve()

;int dy=

;int newx, newy;

for(

int i =

0; i <

3; i++)}

}if(check) ans++

;}

然後就完成啦!

第一題答案:29

第二題答案:1580

以上**已經ac

這種題的思路都是dfs,且一定是dfs,一定要保證所有的結果都填完以後再去判斷是否可行,可行的話答案就增加一,然後我們可以用乙個判斷的函式去判斷,用搜尋的函式去填數。這就是一般的思路

1.把所有的空都填完整

2.判斷可行

好了,今天的填數問題就到這裡。

釋然每天發布一點自己學習的知識,希望2年後我們也能在acm的賽場上見面,一起去追尋自己的程式猿之路吧!

後期也會和大家一起分享學習心得和學習經驗呢,明天我們不見不散哦!

下期預告:

第二十天 繼承

繼承指的是新建類的方法 新建的類稱之為子類或者派生類 子類繼承的類叫做父類,也 稱之為基類或超類 子類可以繼承父類的屬性 特徵與技能 並且可以派生出自己的屬性 特徵與技能 繼承的目的是為了減少 冗餘 減少重複 抽象指的是抽取相似的部分,稱之為抽象.物件是特徵與技能的結合體.類是一系列物件相同的特徵與...

Android第二十天 ViewPager

viewpager的使用步驟 1.在布局檔案中定義viewpager控制項 android id id vp android layout width match parent android layout height match parent android text string hello ...

Linux C學習第二十天

棧和佇列 棧 後進先出 新增元素 壓棧 刪除元素 出棧 棧的實現 1.順序棧。2.鏈式棧 棧最頂端的元素叫棧頂元素。順序棧 標頭檔案 ifndef stack h define stack h define size 10 typedef enum bool typedef int data typ...