其實是昨天寫的題,但是昨天晚上太累了就沒寫總結了,再加上昨天有兩道題沒有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 自主訓練日誌
先說一下貪心演算法 目前理解的程度 和它的名字一樣,貪心演算法是 短視 的,只顧眼前的利益,不考慮整體最優。假設每一步選擇都是不可逆的,每一步選擇之後都有多個選擇,而我們要做的就是選擇當前利益最高的那個選項,直到達到最終目的,然後再回頭看對於整體是否趨於最優。貪心演算法可以說是最簡單的一種思路,用每...