日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

递 归 ,递 推 ,贪 心,学 习 总 结

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 递 归 ,递 推 ,贪 心,学 习 总 结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??目? ? ? ? ? ? ? ? ? ? ? ?錄

壹 :遞 歸

一 . 遞 歸 初 步( 理 論 )

二 . 遞 歸 深 入( 習 題 )

貳 :遞 推

一? .? 遞? 推? 初? 步 ( 理 論 )

二 . 遞 推 深 入 ( 習 題 )

叁 : 貪 心

一? .? 貪 心? 初? 步 ( 理 論 )

?二 . 貪 心?深 入 ( 習 題 )



??


壹 :遞 歸

一 . 遞 歸 初 步( 理 論 )

?是指函數/過程/子程序在運行過程序中直接或間接調用自身而產生的重入現象。在函數中函數不斷引用自身,直到引用的對象已知。使用遞歸解決問題,思路清晰,代碼少。但是在主流高級語言中使用遞歸算法要耗用更多的棧空間,所以在堆棧尺寸受限制時,應避免采用。所有的遞歸算法都可以改寫成與之等價的非遞歸算法。

遞歸函數基本寫法

/*題目:算出從1到n之間所有數的和 */ #include<bits/stdc++.h> using namespace std; int n,sum=0; //sum用來求和 int fun(int num,int i) { //i表示下表if(i<=num) {sum+=i;fun(num,i+1);}else {return 0;} } int main() {cin>>n;fun(n,0);cout<<sum;return 0; }

這樣就完成了 一個遞歸的過稱

二 . 遞 歸 深 入( 習 題 )

1148 - 【入門】數數小木塊-東方博宜OJhttps://oj.czos.cn/p/1148

思 路 :函 數 內 算 出 每 一 層 積 木 的 塊 數

? ? ? ? ? ? ?再 在 主 函 數 內 依 層 求 和?

題 解 :

#include<bits/stdc++.h> using namespace std; int num(int c) {int r;if(c==1) {r=1;}else{r=num(c-1)+c;} return r; } int main() {int n,res=0;cin>>n;while(n){res=res+num(n);n--;}cout<<res;return 0; }

1238 - 【入門】統計每個月兔子的總數-東方博宜OJhttps://oj.czos.cn/p/1238

思 路 :這 題 使 用 遞 歸 會 超 時)

???????????????使 用 普 通 遞 歸?與 數 組 結 合 防 止 超 時

代 碼:

#include<bits/stdc++.h> using namespace std; int main() {long long a[60],x;cin>>x;a[1]=1;a[2]=1;for(int i=3;i<=x;i++){a[i]=a[i-1]+a[i-2];}cout<<a[x];return 0; }

1223 - 【入門】漢諾塔的移動次數-東方博宜OJhttps://oj.czos.cn/p/1223

思 路 :這 題 重 點 是 找 到 規 律

? ? ? ? ? ? ?然 后 在 進 行 遞 歸 求 解

代 碼 :

#include<bits/stdc++.h> using namespace std; int fun(int n) {int r=0;if(n==1){return 1;}else{return fun(n-1)*2+1;} } int main() {int n;cin>>n;cout<<fun(n); return 0; }

貳 :遞 推

一? .? 遞? 推? 初? 步 ( 理 論 )

遞推是按照一定的規律計算序列中的每個項,通常是通過計算前面的一些項來得出序列中的指定項的值。其思想是把一個復雜的龐大的計算過程轉化為簡單過程的多次重復,該算法利用了計算機速度快和不知疲倦的機器特點

遞 推 的 基 本 寫 法

/*https://oj.czos.cn/p/1238 */ #include<bits/stdc++.h> using namespace std; int main() {long long a[60],x;cin>>x;a[1]=1;a[2]=1;for(int i=3;i<=x;i++){a[i]=a[i-1]+a[i-2];}cout<<a[x];return 0; }

二 . 遞 推 深 入 ( 習 題 )

1298 - 【基礎】摘花生問題-東方博宜OJhttps://oj.czos.cn/p/1298

思 路 :找 到 摘 花 生 的 最 好 的 路 線

? ? ? ? ? ? ?利 用 遞 推 的 思 想 進 行 求 解

代 碼 :

#include<bits/stdc++.h> using namespace std; int main() {int x,y;cin>>x>>y;int a[x+2][y+2];for(int i=1;i<=x;i++){for(int j=1;j<=y;j++){cin>>a[i][j];}}for(int i=2;i<=x;i++){a[1][i]+=a[1][i-1];}for(int i=2;i<=x;i++){a[i][1]+=a[i-1][1];}for(int i=2;i<=x;i++){for(int j=2;j<=y;j++){if(a[i][j-1]>a[i-1][j]){a[i][j]+=a[i][j-1];}else if(a[i][j-1]>a[i-1][j]){a[i][j]+=a[i-1][j];}else{a[i][j]+=a[i-1][j];}}}cout<<a[x][y];return 0; }

1374 - 【基礎】摘花生問題(2)-東方博宜OJhttps://oj.czos.cn/p/1374

思 路 :在 上 題 的 基 礎 上

? ? ? ? ? ? ?進 行 改 良 輸 出 路 線 即 可?

代 碼 :

#include<bits/stdc++.h> using namespace std;int main() {int a[110][110],t[110][110],b[110];int x,y;cin>>x>>y;for(int i=1;i<=x;i++){for(int j=1;j<=y;j++){cin>>a[i][j];t[i][j]=a[i][j];}}for(int i=2;i<=x;i++){a[1][i]+=a[1][i-1];}for(int i=2;i<=x;i++){a[i][1]+=a[i-1][1];}for(int i=2;i<=x;i++){for(int j=2;j<=y;j++){if(a[i][j-1]>a[i-1][j]){a[i][j]+=a[i][j-1];}else if(a[i][j-1]>a[i-1][j]){a[i][j]+=a[i-1][j];}else{a[i][j]+=a[i-1][j];}}}int k=2,i=x,j=y;b[1]=t[x][y];while(1){if(i==0&&j!=0){b[k]=t[i][j];j--;k++;}else if(j==0&&i!=0){b[k]=t[i][j];i--;k++;}else if(i!=0&&j!=0){if(a[i][j-1]>a[i-1][j]){b[k]=t[i][j-1]; j--;k++;}else {b[k]=t[i-1][j];i--;k++;}}else{break;}}for(int j=k;j>=1;j--){if(b[j]!=0){if(j!=1) cout<<b[j]<<"-";else cout<<b[j];}}return 0; }

叁 : 貪 心

一? .? 貪 心? 初? 步 ( 理 論 )

貪心法是從問題的某個初始解出發,采用逐步構造最優解的方法,向給定的目標前進。在每一個局部階段,都做一個“看上去”最優的決策,并期望通過每一次所做的局部最優選擇產生出一個全局最優解。做出貪心決策的依據稱為“貪心策略”。要注意的是,貪心策略一旦做出,就不可再更改。與遞推不同的是,貪心嚴格意義上說只是一種策略或方法,而不是算法推進的每一步不是依據某一個固定的遞推式,而是做一個當時“看似最佳”的貪心選擇(操作),不斷將問題歸納為更小的相似子問題。所以,歸納、分析、選擇正確合適的貪心策略,是解決貪心問題的關鍵。對于一個問題,如果想用貪心法求解,首先要想到基于某種“序”或者“規則”的貪心策略。?其次還要能證明其正確性。

貪 心 的 基 本 寫 法

/*https://oj.czos.cn/p/1229 */ #include<bits/stdc++.h> using namespace std; int a[1010],n,x,p,k,j; int main() {cin>>n;for(int i=1;i<=n;i++){cin>>x; p=-1;for(int j=1;j<=k;j++){if(a[j]>=x){p=j;break; }}if(p==-1){k++;a[k]=x;}else{a[p]=x;}}cout<<k;return 0; }

?二 . 貪 心?深 入 ( 習 題 )

1372 - 【基礎】活動選擇-東方博宜OJhttps://oj.czos.cn/p/1372

思 路 :找 到 貪 心 策 略?

? ? ? ? ? ? ?從 而 進 行 求 解?

代 碼 :

#include<bits/stdc++.h> using namespace std; int b[110],e[110]; int n,c; int main() { cin>>n;for(int i=1;i<=n;i++){cin>>b[i]>>e[i]; }for(int i=1;i<=n-1;i++){for(int j=1;j<=n-1;j++){if(e[j]>e[j+1]){swap(e[j],e[j+1]);swap(b[j],b[j+1]);}}}int end=e[1];c=1;for(int i=2;i<=n;i++){if(b[i]>=end){c++;end=e[i];}}cout<<c;return 0; }

1375 - 【提高】攔截導彈方案求解-東方博宜OJhttps://oj.czos.cn/p/1375

思 路 :同 上 題

代 碼 :

#include<bits/stdc++.h> using namespace std; int n,q,k,x; int a[1100]; int m[1100],w[1100]; int main() {cin>>n;for(int i=1;i<=n;i++) cin>>m[i];for(int i=1;i<=n;i++){x=m[i];q=-1;for(int j=1;j<=k;j++){if(a[j]>=x){q=j;break;}}if(q==-1){k++;a[k]=x;w[i]=k;}else{ a[q]=x;w[i]=q;}} cout<<k<<endl;for(int i=1;i<=k;i++){cout<<i<<':';for(int j=1;j<=n;j++){if(w[j]==i) cout<<m[j]<<' ';}cout<<endl;}return 0; }


總結

以上是生活随笔為你收集整理的递 归 ,递 推 ,贪 心,学 习 总 结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。