热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

noj2112拯救活动室的男女比例(最大费用最大流)

拯救活动室的男女比例时间限制(普通Java):2000MS6000MS运行内存限制:81920KByte总提交:116测试通过:38比赛描述为了拯救活动室的男女比例,


拯救活动室的男女比例


时间限制(普通/Java) : 2000 MS/ 6000 MS          运行内存限制 : 81920 KByte
总提交 : 116            测试通过 : 38 

比赛描述

    为了拯救活动室的男女比例,队长kalili带着队员们连他一起共k人去说服妹子们努力学习算法加入A协大家庭,妹子们站成一个直角三角形,一共m行,第i行有i个妹子,每个妹子有一个颜值aij,规定每轮只能一个人来说服妹子且一人只能说服一轮,开始都面对第一个妹子,每说服完一个妹子只能往前或者往左走继续去说服别的妹子,如果遇到已经被说服的妹子则不用说服继续走,每个妹子最多被说服一次,现在已知A协的男精英们口才很好,不管颜值多高的妹子都能直接说服,求他们能说服的妹子们的总颜值最大是多少




输入

第一行一个整数T代表共T组样例,每组样例第一行包含两个数字m和k,接下来m行,第i行有i个数字表示对应妹子的颜值

(1 <= T <= 200,1 <= m <= 25, 0 <= k <= m,0 <= aij <= 108)

T >= 100的数据不超过五组

输出

对于每组样例,输出一个数字表示能说服的妹子们的最大总颜值


样例输入

2
2 1
1
1 2
3 2
1
2 3
4 5 6

样例输出

4
21

提示

对于第二组样例

第一个人可以以(1,1) -> (2,1) -> (2, 2) -> (3,2) -> (3,3)的顺序说服5个妹子

第二个人的顺序可以是(1, 1) -> (2, 1) -> (3, 1),因为(1,1) (2,1)位置的妹子已经被说服了,他这一轮只说服了一个妹子。

两轮下来所有妹子都被说服,因此总颜值就是她们的颜值和为21



思路:很明显的网络流,就是不知道会不会TLE,试了一发TLE,然后发现N开小了,改大之后就AC了

只要跟题目所说的一样能达到就连边即可,注意一个点要拆成两个点,为了让费用只能加一次,拆成两个点后连两条边,一条容量为1,费用为aij,一条容量为k,费用为0,由于是最大费用最大流,所以如果会经过这个店,一定会先流容量为1的边

代码:

#include
#include
#include
#include
#include
#include
using namespace std;
#define N 1350
#define INF 999999999
struct Edge
{int u,v,next,cap,cost;
} edge[N*N];
int cnt,head[N];
int vis[N],pp[N];
long long d[N];
void init()
{cnt=0;memset(head,-1,sizeof(head));
}
void addedge(int u,int v,int cap,int cost)
{edge[cnt].u=u;edge[cnt].v=v;edge[cnt].cap=cap;edge[cnt].cost=cost;edge[cnt].next=head[u];head[u]=cnt++;edge[cnt].u=v;edge[cnt].v=u;edge[cnt].cap=0;edge[cnt].cost=-cost;edge[cnt].next=head[v];head[v]=cnt++;
}
int spfa(int s,int t,int n)
{queueq;memset(vis,0,sizeof(vis));memset(pp,-1,sizeof(pp));///pp[i]表示最短路径上以i为终点的边的编号for(int i=0; i<=n; i++)d[i]=-INF;d[s]=0;vis[s]=1;q.push(s);while(!q.empty()){int u=q.front();q.pop();vis[u]=0;for(int i=head[u]; i!=-1; i=edge[i].next){int v=edge[i].v;if(edge[i].cap>0&&d[v]}
long long MCMF(int s,int t,int n)
{long long mincost=0;int minflow;///最大费用,路径中最小流量,总流量while(spfa(s,t,n))///找当前的最长路{minflow=INF+1;for(int i=pp[t]; i!=-1; i=pp[edge[i].u])minflow=min(minflow,edge[i].cap);///从路径中找最小的流量for(int i=pp[t]; i!=-1; i=pp[edge[i].u]){edge[i].cap-=minflow;///当前边减去最小流量edge[i^1].cap+=minflow;///反向边加上最小流量}mincost+=d[t]*minflow;///最小费用等于路径和*每条路径的流量(经过多少次)}return mincost;
}
int main()
{int n,m,k,v,T,tot=1;scanf("%d",&T);while(T--){init();scanf("%d %d",&m,&k);int s=0,n=2*m*m+1;addedge(s,1,k,0);for(int i=1; i<=m; i++){for(int j=1; j<=i; j++){scanf("%d",&v);addedge((i-1)*m+j,m*m+(i-1)*m+j,1,v);addedge((i-1)*m+j,m*m+(i-1)*m+j,k,0);if(i!=m) addedge(m*m+(i-1)*m+j,i*m+j,k,0);if(j!=i) addedge(m*m+(i-1)*m+j,(i-1)*m+j+1,k,0);}}addedge(2*m*m,n,k,0);printf("%I64d\n",MCMF(s,n,n));}return 0;
}








推荐阅读
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 在给定的数组中,除了一个数字外,其他所有数字都是相同的。任务是找到这个唯一的不同数字。例如,findUniq([1, 1, 1, 2, 1, 1]) 返回 2,findUniq([0, 0, 0.55, 0, 0]) 返回 0.55。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • MQTT技术周报:硬件连接与协议解析
    本周开发笔记重点介绍了在新项目中使用MQTT协议进行硬件连接的技术细节,涵盖其特性、原理及实现步骤。 ... [详细]
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 本文详细介绍了 Apache Jena 库中的 Txn.executeWrite 方法,通过多个实际代码示例展示了其在不同场景下的应用,帮助开发者更好地理解和使用该方法。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本教程涵盖OpenGL基础操作及直线光栅化技术,包括点的绘制、简单图形绘制、直线绘制以及DDA和中点画线算法。通过逐步实践,帮助读者掌握OpenGL的基本使用方法。 ... [详细]
  • Java编程实践:深入理解方法重载
    本文介绍了Java中方法重载的概念及其应用。通过多个示例,详细讲解了如何在同一类中定义具有相同名称但不同参数列表的方法,以实现更灵活的功能调用。 ... [详细]
  • 本文总结了Java程序设计第一周的学习内容,涵盖语言基础、编译解释过程及基本数据类型等核心知识点。 ... [详细]
author-avatar
antefigure850_495
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有