目標: an
s=mi
n∑i=
1na1
,i(∑
j=1n
a1,j
∗bj,
i−c1
,i)
化簡得到 an
s=mi
n∑i=
1n∑j
=1na
1,i∗
a1,j
∗bi,
j−∑i
=1na
1,i∗
c1,i
而ai=0,1
,因此轉化為這個模型:
又n個物品,如果物品i,j都選取,獲得bi
,j的利潤,而選取物品i,j分別花費ci
,cj 的代價。這是乙個最小割的模型。
源點向(i,
j)連邊,容量為bi
,j ,(
i,j)
向i,j連邊,容量為inf,i,j向匯點連邊,容量為ci
,cj ,求出來的最小割也就是花費的最小代價,用總利潤減去最小代價也就是最大獲利。
#include
#include
#include
#include
#define inf 0x7fffffffll
#define maxn 300010
using
namespace
std;
typedef
long
long ll;
inline ll min(ll a,ll b)
e(int a,ll b,int c)
};vector
g[maxn];
void add(int u,int v,ll w)
int d[maxn],vd[maxn],n,b[510][510],c[510],s,t,n;
ll sum,flow;
ll aug(int i,ll augco)
if(d[v] < mind) mind = d[v];}}
if(augco == augc)
return augco-augc;
}void sap()
int main()
for(int i = 1; i <= n; i++)
n = n+n*n+2;
sap();
cout
<}
BZOJ 3996 TJOI2015 線性代數
給出乙個n n的矩陣b和乙個1 n的矩陣c。求出乙個1 n的01矩陣a.使得 d a b c a t最大。其中a t為a的轉置。輸出d 第一行輸入乙個整數n,接下來n行輸入b矩陣,第i行第j個數字代表bij.接下來一行輸入n個整數,代表矩陣c。矩陣b和矩陣c中每個數字都是不超過1000的非負整數。輸...
bzoj3996 TJOI2015 線性代數
首先轉化題目 給你n 個物品,可以選或不選。選第i 個物品需要c i 的代價。同時選第 i 和第 j個物品獲得b i j 的收益 問最大收益。網路流建圖 考慮s um ni 1 nj 1b i j 剩下就變成了算代價最小 也就是最小割 建點 i,j 和i,對於每個點 i j 向 i,j 連一條容量為...
bzoj3996 TJOI2015 線性代數
description 給出乙個n n的矩陣b和乙個1 n的矩陣c。求出乙個1 n的01矩陣a.使得 d a b c a t最大。其中a t為a的轉置。輸出d input 第一行輸入乙個整數n,接下來n行輸入b矩陣,第i行第j個數字代表bij.接下來一行輸入n個整數,代表矩陣c。矩陣b和矩陣c中每個...