poj 1015 大力dp,01揹包變種

2021-09-25 04:55:20 字數 1661 閱讀 7471

題意不想說了,人寫吐了,其實難也不能說很難,就是蠻繞的。

ac**:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

#define endl '\n'

#define pb push_back

#define css(n) cout<#define sd(a) scanf("%d",&a)

#define sld(a) scanf("%lld",&a)

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

#define p_queue priority_queue

using namespace std;

typedef

long

long ll;

const

int maxn=

1e5+5;

int n,m;

int t;

double a,b;

int dp[30]

[1000];

//i,j表示選了i個人差值為j時的最大的和、

struct node

peo[

250]

;vector<

int> path[25]

[1000];

intmain()

int mxx=m*21;

//防止負數值,每乙個都加上mxx

memset

(dp,-1

,sizeof

(dp));

dp[0]

[mxx]=0

;for

(int i=

1;i<=n;i++

)//物品種類的迴圈 }}

}}int mi;

for(mi=

0;mi<=mxx;mi++)}

//此時的mi就是最小的差值mi

int mii;

if(dp[m]

[mxx-mi]

>dp[m]

[mxx+mi]

) mii=mxx-mi;

else mii=mxx+mi;

int mx=dp[m]

[mi]

;printf

("jury #%d\n"

,cas++);

printf

("best jury has value %d for prosecution and value %d for defence:\n"

,(dp[m]

[mii]

+mii-mxx)/2

,(dp[m]

[mii]

-(mii-mxx))/

2);// for(int i=0;ifor

(int i=

0;i)printf

(" %d"

,path[m]

[mii]

[i])

;printf

("\n");

}return0;

}

演算法筆記 揹包DP (0 1揹包)

1.0 1揹包 參考例題 hloj416採藥 二維解法 我們設f i j 為前i個物品放進容量為j的揹包的最大價值 設體積為v i 價值為w i 我們可以列舉i 1到n 和j 1到n 不難得出狀態轉移方程 f i j max 可以知道,當第i件物品不取時,總價值為f i 1 j 取得話,總價值為前i...

poj 2923 狀壓dp 01揹包

好牛b的思路 題意 一系列物品,用二輛車運送,求運送完所需的最小次數,兩輛車必須一起走 解法為狀態壓縮dp 揹包,本題的解題思路是先列舉選擇若干個時的狀態,總狀態量為1 1 include2 include3 include 4 include5 include6 using namespace s...

揹包DP(01揹包,多重揹包,完全揹包)

從前乙個轉態轉移過來,選還是不選 for int i 1 i n i else f i j f i 1 j 01揹包優化 滾動陣列 for int i 1 i n i for int j m j 1 j if weight i j f j max f j f j weight i value i 優...