題意不想說了,人寫吐了,其實難也不能說很難,就是蠻繞的。
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 優...