题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6611
题目描述
给你一个序列,你要在序列中寻找k个非下降子序列,使得所有子序列的和最大。
思路
(比赛的时候不会Dijkstra优化,还好隔壁大佬手写栈+前向星强+快读强行卡过2333
最大上升子序列一直是可以用最小费用最大流的思路解的,一个点a[i]与它之后所有大于它的点建边,然后把它自己拆点建边,边流量为1,费用为a[i],然后起点与所有点建边,终点与所有点建边,跑一个固定费用为k的费用流就是答案了。
这是标程里面的Dijkstra费用流模板,一直以为Dijkstra处理不了费用流(因为要建反向边,反向边权值为负数)这就相当于保存模板吧
//author Forsaken
#define Hello the_cruel_world!
#pragma GCC optimize(2)
#include
#include
#include
#include
#include
#include
#include