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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

dfs解决选或不选问题

發布時間:2025/3/20 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 dfs解决选或不选问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 92. 遞歸實現指數型枚舉
  • 神奇的口袋
  • 01背包問題

在做題的時候,有的問題就是問你這個東西選或不選的問題。專業說法叫做01背包。
我個人覺的叫選不選問題更能通速易懂。

92. 遞歸實現指數型枚舉

https://www.acwing.com/problem/content/94/

這就是一個典型的選或不選問題。
對于每一個數我們可以選,也可以不選。

#include<cstdio> #include<algorithm> #include<iostream> using namespace std; int n; const int max=20; int a[20];//用這個數來記錄一下我們對于每個數的狀態 // 0代表未處理 1代表選 2代表不選 void dfs(int u)//代表當前選的數是第幾個(從下標0開始) {if(u==n){for(int i=0;i<n;i++){if(a[i]==1){printf("%d ",i+1);}} printf("\n");return;}a[u]=1;//選這個數dfs(u+1);a[u]=0;//恢復現場a[u]=2;//不選這個數dfs(u+1);a[u]=0;//恢復現場 } int main(void) {cin>>n;dfs(0); }

神奇的口袋

http://codeup.cn/problem.php?cid=100000583&pid=2

這其實也是一個選或者不選的問題。不過加了一點的限制。
要保證體積和為40。

#include<cstdio> #include<iostream> using namespace std; int V=40; int n; int a[1005]; int ans=0; void dfs(int index,int v)//index 當前的第幾個物品的判斷選不選(從0開始的) v當前的體積 {if(index==n){if(v==40)ans++;return;}dfs(index+1,v);//不選 dfs(index+1,v+a[index]);//選 } int main(void) {while(cin>>n){ for(int i=0;i<n;i++){scanf("%d",&a[i]);} dfs(0,0);printf("%d\n",ans);ans=0;}return 0; }

01背包問題


這也是選不選的問題,不過是在各種情況中選擇價值最大的。
當然本題用dfs()解決是不可以的。因為n的最大值可以為1000那么時間復雜度為21000太大了。
不過本文主要是講的dfs()的思想。所以列了出來。對于這種數據量大的情況還是用動態規劃解決方便。

#include<cstdio> #include<cstring> #include<iostream> #define max 10005 using namespace std; int n,V; int w_arr[max]; int v_arr[max]; int M=-1;//保存最大的 void dfs(int index,int v,int w)//v 代表當前的體積 w代表當前的價值 {if(index==n) {if(v<=V){if(w>M){M=w;}}return;}dfs(index+1,v,w);//不選 if(v_arr[index]+v<=V)dfs(index+1,v_arr[index]+v,w_arr[index]+w);//選 } int main(void) {cin>>n>>V;for(int i=0;i<n;i++){scanf("%d %d",&v_arr[i],&w_arr[i]);}dfs(0,0,0);printf("%d\n",M);return 0; }

總結

以上是生活随笔為你收集整理的dfs解决选或不选问题的全部內容,希望文章能夠幫你解決所遇到的問題。

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