省略
省略
C++に変換後のコードはこちら
int N, M, R[3];
ll A[500], B[500];
ll gain(int i, int j){
ll res = A[j] * B[j];
rep(i) res *= B[j];
return res % R[i];
}
ll lost(int i, int j){
ll res = A[j] * B[j], tmp = A[j];
if(i==0) return res;
rep(i) (res, tmp) *= B[j];
return res - tmp;
}
{
int node, st, ed, flow;
ll cost;
minCostFlow<int,ll> f;
rd(N,M,A(N),B(N),R(3));
node = 4 * N + 3;
st = node++;
ed = node++;
f.malloc(node);
f.init(node);
rep(i,3) f.addEdge(st, 4*N+i, M, 0);
rep(i,3) rep(j,N) f.addEdge(4N+i, i*N+j, 1, 0);
rep(i,3) rep(j,N) f.addEdge(i*N+j, 3*N+j, 1, -gain(i,j));
rep(i,3) rep(j,N) f.addEdge(3*N+j, ed, 1, lost(i,j));
f.solve(st, ed, flow, cost);
wt(-cost);
}
Current time: 2024年04月26日15時33分02秒
Last modified: 2021年01月02日17時05分31秒 (by laycrs)
Tags: Competitive_Programming_Incomplete AtCoder
トップページに戻る
Logged in as: unknown user (not login)