揹包dp加路徑搜尋

2021-10-09 03:18:12 字數 1529 閱讀 1901

p1759 通天之潛水

首先不難看出這是一道揹包dp加路徑搜尋,只是不知道怎麼求而已,揹包dp比較好求,和以前做的揹包dp差不多,只是由乙個限制條件變成了兩個而已,那麼我們就可以直接三重for求解,路徑搜尋的話,我從大佬那裡學到了一種新的求解方法,用string 記錄路徑,這也太強了,這個直接看**吧

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ll long long

#define ms(a,b) memset(a,b,sizeof(a))

#define lowbit(x) x & -x

#define fi first

#define ull unsigned long long

#define se second

#define endl "\n"

#define bug cout<<"----acac----"<#define ios ios::sync_with_stdio(false), cin.tie(0),cout.tie(0)

using

namespace std;

const

int maxn =

1e6+10;

const

int maxm =

1.5e5+50

;const

double eps =

1e-18

;const

double inf =

0x3f3f3f3f

;const

double lnf =

0x3f3f3f3f3f3f3f3f

;const

int mod =

1e9+7;

const

double pi=

3.141592653589

;struct node

a[405];

int dp[

405]

[405

],path[

405]

[405];

string ans[

405]

[405];

intmain()

for(

int i=

1;i<=n;i++)}

}}printf

("%d\n"

,dp[m]

[v])

;for

(int i=

0;i[v].

size()

;i++

) cout

}

揹包 DP 揹包

揹包 題目 是dp中較為常見的題目 分為 0 1 揹包 完全揹包 和多重揹包 這三類 是越來越深入的首先來介紹一下 0 1揹包 首先 0 1 揹包的含義是 給你乙個容量位m的揹包 然後給你n個物品 每個物品具有一定價值和一定重量 會站一定的揹包空間 答案是在n個物品中那幾個 然後使得到的價值最大 首...

揹包dp之01揹包

現在我們有n個配件,他們有不同的價值.但是我們揹包的容量是有限的,因為我們只有乙個一級包,所以我們最多可以裝v重量的東西.但是為了能更好的吃到雞 不存在的 我們要攜帶更有價值的配件,請問我們最多能拿多少價值的配件來當快遞員呢?輸入的第一行是t,表示有一共要打t場比賽.每組資料由三行組成.第一行包含兩...

dp 揹包之多重揹包

問題 多重揹包也是 0 1 揹包的乙個變式。與 0 1 揹包的區別在於每種物品有ki個,而非乙個。解決方案 將k個相同的物品,看作k個不同的物品,但是wi,ci都一樣。即可套用 01揹包方案 詳見 優化方法 二進位制優化 設k個物品分成 a xx a xx 1 a xx k 1 個物品。那麼 a x...