bzoj3996 TJOI2015 線性代數

2021-08-15 17:55:32 字數 1248 閱讀 6559

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中每個數字都是不超過1000的非負整數。

output

輸出最大的d

sample input

3 1 2 1

3 1 0

1 2 3

2 3 7

sample output

2 hint

1<=n<=500

推導一下式子變成 選擇每個物品需要花費乙個代價 然後共同選兩種物品 會得到乙個好處 就是b矩陣 現在求最大收益 那就是最大權閉合子圖

#include

#include

#include

#include

#define inf 0x3f3f3f3f

#define n 300000

using

namespace

std;

inline

char gc()

return *s++;

}inline

int read()

while(ch<='9'&&ch>='0') x=x*10+ch-'0',ch=gc();

return x*f;

}struct nodedata[6*n];

int num=1,n,t,h[n],c[n],level[n],cur[n];long

long ans;

inline

void insert1(int x,int y,int z)

inline

bool bfs()

}return0;}

inline

int dfs(int x,int s)

}return ss-s;

}int main()

for (int i=1;i<=n;++i) insert1(0,i,read());

while(bfs())

memcpy(cur,h,sizeof(h)),ans+=dfs(0,inf);printf("%d\n",cnt-ans);

return

0;}

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 連一條容量為...

BZOJ 3996 TJOI2015 線性代數

題鏈 題解 好題啊。不太熟悉矩陣相關,所以按某些博主的模型轉換來理解的 首先,那個式子可以化簡為 d 某個數 a b a c a a 為 a的倒置矩陣 因為 a 為 01 矩陣,把其考慮為 n個物品選或不選,c i 對應為i物品的花費,而b i,j 對應為同時選了i,j兩個物品後帶來的價值。所以結合...