2019 10 9自主訓練小結

2021-09-28 12:22:27 字數 4221 閱讀 8545

其實是昨天寫的題,但是昨天晚上太累了就沒寫總結了,再加上昨天有兩道題沒有a出來心態有點小崩。。。。。。

感覺晚上還是不能刷題,熬夜暫且不說,反正不做題也熬了…,關鍵是基本上都會自閉,然後睡又睡不著,要等好久才能睡著,第二天早上的課太累了

昨天晚上到vj上面找到了一套比較基礎,但是我覺得還比較好的題,於是就做了做

a:棋盤問題(dfs)

做了a、b後深深發現自己深搜和廣搜還是不太熟練,尤其是深搜,太不會變通了,這道題和八皇后問題就很相似啊,昨晚居然還卡著了,今天看了別人題解才a。。。

#include

#include

#include

#include

using

namespace std;

int a[

110]

[110];

//判斷能不能放棋子

char mp[

110]

[110];

//棋盤

int col[

110]

;//表示每列是否有放棋子

int n,k;

//題目給出:n表示棋盤大小,k表示要放多少個棋子

int ans;

//最終結果

void

dfs(

int row,

int num)

//row表示當前掃瞄所在行、num表示放的棋子個數

if(row>=n)

//防止越界

return

;for

(int i=

0;idfs(row+

1,num)

;//該行沒有滿足的情況,直接跳到下一行

return;}

intmain()

for(

int i=

0;idfs(0,

0);printf

("%d\n"

,ans);}

return0;

}

b:迷宮問題(bfs)

一道bfs的模板題,很好的複習了一下bfs,這裡可能稍微高階點的就是列印路徑,直接手寫佇列,每次記錄字首即可

但是這題有個比較坑的地方就是:空格!空格!空格!

列印路徑時:x和y之間除了要有逗號外還要有空格

#include

#include

#include

#include

using

namespace std;

int mp[5]

[5];

//迷宮

int vis[5]

[5];

//標記陣列

int dir[4]

[2]=

;//方向陣列

struct node

;node que[

1100];

//手寫佇列,方便列印路徑

void

print_path

(int i)

void

bfs(

int sx,

int sy)

if(mp[fx]

[fy]==0

&&vis[fx]

[fy]==0

)if(fx==

4&&fy==4)

}if(flag==1)

break

; front++;}

if(flag==1)

}int

main()

}bfs(0

,0);

return0;

}

c:allowance(貪心)

開始看題目就覺得是貪心,但是一直沒找貪心策略,導致昨天沒a出來,今天看了下面這篇部落格才 有了些許思路,還是一道很好的貪心題

1. 按照面值從大到小取,面值大於等於c的,直接取光。

2. 再按面值從大到小取,湊近c,可以小於等於c,但不能大於c。

3.最後從小到大取,湊滿c,這裡的湊滿可以等於大於c。然後將上述2,3步取到的面值全部取走,再轉入步驟2,這樣每次找到的取法就是當前最優取法,直到所剩下的金幣總價值不夠c結束。

很好的題目,很能表現貪心思想:從區域性的最優解找出總體最優解。

#include

#include

#include

#include

#define inf 0x3f3f3f3f

using

namespace std;

int use[30]

;//記錄當前取法的第i種面值取的個數

struct node

;node a[30]

;bool

cmp(node x,node y)

intmain()

sort

(a,a+n,cmp)

; ans=0;

for(

int i=n-

1;i>=

0;i--)}

while(1

)}}if

(cnt>0)

}}if(flag)

break;}

}if(!flag)

break

; m=inf;

for(

int i=

0;i) ans+

=m;for

(int i=

0;iprintf

("%d\n"

,ans)

;return0;

}

d:數塔(dp)

一道dp的模板題,也是很經典的dp題,就不囉嗦了

#include

#include

#include

#include

using

namespace std;

int dp[

110]

[110];

int a[

110]

[110];

int n;

intmain()

}for

(int i=

0;i)for

(int i=n-

1;i>=

0;i--)}

printf

("%d\n"

,dp[0]

[0])

;}return0;

}

e:母牛的故事(dp)

類似於斐波拉契數列和樓梯問題,也是一道水題

#include

#include

#include

#include

#define ll long long

using

namespace std;

ll f[60]

;int

main()

int n;

while(~

scanf

("%d"

,&n)

)return0;

}

f:river hopscotch(二分)

這道題感覺還是有點懵,雖然告訴我用二分,但是都還是有點不會,看了別人的部落格才有所領悟,居然還有這種操作,歸根結底:題做少了。。。

#include

#include

#include

#include

using

namespace std;

int a[

50010];

int l,n,m;

intmain()

a[0]

=0; a[n+1]

=l; n+=2

;sort

(a,a+n)

;int low=

99999999

;int high=l;

for(

int i=

1;i)while

(low<=high)

else}if

(cnt>m)

else

low=mid+1;

}printf

("%d\n"

,high)

;return0;

}

這幾道題感覺還挺好的,雖然都不是太難,但是還是再一次提醒了我許多

2019 1 19 自主訓練日誌

今天第一次進行自主訓練,第一天就遇到了麻煩,廢話少說,直接上題目。如果乙個數字的十進位制表示中有7,我們就認為他是幸運數字。輸入兩個整數l,r 1 l r 100000 輸出所有滿足l n r的幸運數字n。從小到大輸出所有幸運數字,一行乙個。特別注意如果區間內有任何乙個幸運數字,輸出none。輸入樣...

2019 1 28 自主訓練日誌

訓練第八天,今天沒有選擇繼續看課本,刷了更多的題。簡單的題目做了幾道,用來攢點頭盾,也做了幾道難度適中的題目,難題沒有碰。先說乙個相對簡單的題目 請你幫小瓜將正整數n分解質因數,並從小到大輸出所有的質因數 如果乙個質因數出現多次,則輸出多次 輸入一行乙個正整數n,保證1 n 10 8。輸出若干行,每...

2019 1 29 自主訓練日誌

先說一下貪心演算法 目前理解的程度 和它的名字一樣,貪心演算法是 短視 的,只顧眼前的利益,不考慮整體最優。假設每一步選擇都是不可逆的,每一步選擇之後都有多個選擇,而我們要做的就是選擇當前利益最高的那個選項,直到達到最終目的,然後再回頭看對於整體是否趨於最優。貪心演算法可以說是最簡單的一種思路,用每...