Original link: https://www.shuizilong.com/house/archives/luogu-p2053-scoi2007-%E4%BF%AE%E8%BD%A6/
- https://www.luogu.com.cn/problem/P2053
It seems that dp is possible, but the cost of repairing each car is not the same for each person.
So it can be modeled as a bipartite graph.
#include <lastweapon/io> #include <lastweapon/mincostflow> using namespace lastweapon; int main() { #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); #endif int m, n; RD(m, n); int s = n*(m+1), t = s+1; mcf_graph<int, int> G(t+1); REP(i, n) { G. add_edge(s, i, 1, 0); REP(j, m) { G.add_edge(n*(j+1)+i, t, 1, 0); int c; RD(c); REP(k, n) G.add_edge(i, n*(j+1)+k, 1, (k+1)*c); } } printf("%.2f\n", (DB)G.flow(s, t).se / n); }
#include <lastweapon/mincostflow2> using namespace lastweapon; int main() { #ifndef ONLINE_JUDGE freopen("in.txt", "r", stdin); //freopen("out.txt", "w", stdout); #endif int m, n; RD(m, n); int s = n*(m+1), t = s+1; mcf_graph<int, int, 2047, 105536, 2047> G; Gs = s; Gt = t; Gn = t+1; REP(i, n) { G. add_edge(s, i, 1, 0); REP(j, m) { G.add_edge(n*(j+1)+i, t, 1, 0); int c; RD(c); REP(k, n) G.add_edge(i, n*(j+1)+k, 1, (k+1)*c); } } printf("%.2f\n", (DB)G.Run().se / n); }
This article is reproduced from: https://www.shuizilong.com/house/archives/luogu-p2053-scoi2007-%E4%BF%AE%E8%BD%A6/
This site is only for collection, and the copyright belongs to the original author.