深度優先搜尋 忍者道具

2021-09-24 14:35:42 字數 1191 閱讀 7910

這題用動規想了巨久……結果看了郭神的答案發現是深搜。也是,題面太像乙個揹包問題了,而我一開始還用了貪心……也是智障天下第一。不過貪心肯定是不行的,但是動規我又想不出怎麼做。

描述

忍者道具有很多種,苦無,飛鏢,震爆彈。l君熱衷於收集忍者道具,現在他有n個道具,每個道具的重量分別是c1、c2…cn。現在他想把這n個道具裝到載重量為w的工具包裡,請問他最少需要多少個工具包?

輸入

第一行包含兩個用空格隔開的整數,n和w。

接下來n行每行乙個整數,其中第i+1行的整數表示第i個道具的重量ci。

輸出

輸出乙個整數,最少需要多少個工具包。

樣例輸入

5 199612

1994

1229

樣例輸出

2提示

對於100%的資料,1<=n<=18,1<=ci<=w<=10^8。

具體思路是以物品作為層數,列舉每個物品放在哪個揹包裡。我一開始以為是跟木棍那題一樣列舉每個揹包放哪些物品,結果又卡了。還是太菜。

廢話不說。ac**如下:

#include using namespace std;

const int maxn = 18;

int used[maxn];

int w;

int m, n, ans = (1 << 30);

int item[maxn];

int bag[maxn];

void dfs(int x, int sum)

for (int i = 0; i < sum; ++i)

} bag[sum] -= item[x];

dfs(x + 1, sum + 1);

bag[sum] += item[x];

}int main()

dfs (0, 1);

cout << ans << endl;

return 0;

}

郭神的答案是pascal**(手動黑臉),導致從1計數到從0計數的轉換**現了一系列問題。其實看到答案覺得還是挺簡單的。也許這就是作業與考試的區別吧……作業會告訴你用什麼演算法,想破了腦袋總能想出來的……

廣度優先搜尋 深度優先搜尋

前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...

廣度優先搜尋,深度優先搜尋

深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...

深度優先搜尋 廣度優先搜尋

深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 package com.neusoft.data.structure 深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 public class dfsbfs 初始化 邊 mmatrix new int vlen vlen for...