TK在大多数 Unix平台、Windows平台和Macintosh系统都是预装好的,TKinter 模块是 Tk GUI 套件的标准Python接口。可实现Python的GUI编程。
  
  Tkinter模块("Tk 接口")是python的标准Tk GUI工具包的接口.Tk和Tkinter可以在大多数的Unix平台下使用,同样可以应用在Windows和Macintosh系统里.Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。(百度百科)
  
  一般的环境里直接import tkinter即可使用,但Ubuntu里既然没有,所以要自己安装,因为笔者Ubuntu系统里默认有python2,python3是自己后来安装的,查阅资料得到结果是tkinter安装成功后,并没有和python3成功链接,需要重新安装python3才可以。
  
  安装:sudo apt-get install python-tk
  
  安装:sudo apt install tk-dev
  
  重新安装python3环境:
  
  进入python版本解压目录:cd python3.7
  
  命令:./configure
  
  命令:make
  
  命令:sudo make install
  
  显示图片需安装pillow库 :
  
  指定版本安装:sudo pip3 install Pillow==4.3.0
  
  题意:求一个子序列,使得这个子序列的  逆序数/长度 最大
  
  解题思路:如果知道什么是最大密度子图,那么这道题就是裸题了。这里保存一下模板~!
  
  感谢大佬的模板
  
  这个模板可以求 带点权带边权某些点必须用的最大密度子图
  
  #include<bits/stdc++.h>
  
  using namespace std;
  
  const double eps = 1e-8;
  
  const int INF = 0x3f3f3f3f;
  
  const int MAXN= 405;//点数的最大值
  
  const int MAXM= 1e6 + 10;//边数的最大值
  
  #define captype double
  
  struct Edge{
  
  int from,to,next;
  
  captype cap;
  
  };
  
  struct SAP_MaxFlow{
  
  Edge edges[MAXM];
  
  int tot,head[MAXN];
  
  int gap[MAXN];
  
  int dis[MAXN];
  
  int cur[MAXN];
  
  int pre[MAXN];
  
  void init(){
  
  tot=0;
  
  memset(head,-1,sizeof(head));
  
  }
  
  void AddEdge(int u,int v,captype c,captype rc=0){
  
  edges[tot] = (Edge){u,v,head[u],c}; head[u]=tot++;
  
  edges[tot] = (Edge){v,u,head[v],rc}; head[v]=tot++;
  
  }
  
  captype maxFlow_sap(int sNode,int eNode, int n){//n是包括源点和汇点的总点个数,这个一定要注意
  
  memset(gap,0,sizeof(gap));
  
  memset(dis,0,sizeof(dis));
  
  memcpy(cur,head,sizeof(head));
  
  pre[sNode] = -1;
  
  gap[0]=n;
  
  captype ans=0;
  
  int u=sNode;
  
  while(dis[sNode]<n){
  
  if(u==eNode)www.mhylpt.com{
  
  captype Min=INF ;
  
  int inser;
  
  for(int i=pre[u]; i!www.furggw.com=-1; i=pre[edges[i^1].to])
  
  if(Min>edges[i].cap){
  
  Min=edges[i].cap;
  
  inser=i;
  
  }
  
  for(int i=pre[u]; i!=-1; i=pre[edges[i^1].to]){
  
  edges[i].cap-=Min;
  
  edges[i^1].cap+=Min;
  
  }
  
  ans+=Min;
  
  u=edges[inser^1].to;
  
  continue;
  
  }
  
  bool flag = false;
  
  int v;
  
  for(int i=cur[u]; i!=-1; i=edges[i].next){
  
  v=edges[i].to;
  
  if(edges[i].cap>0 && dis[www.mcyllpt.com/]==dis[v]+1){
  
  flag=true;
  
  cur[u]=pre[www.michenggw.com]=i;
  
  break;
  
  }
  
  }
  
  if(flag){
  
  u=v;
  
  continue;
  
  }
  
  int Mind= n;
  
  for(int i=head[u]; i!=-1; i=edges[i].next)
  
  if(edges[i].cap>0 && Mind>dis[edges[i].to]){
  
  Mind=dis[edges[i].to];
  
  cur[u]=i;
  
  }
  
  gap[dis[u]]--;
  
  if(gap[dis[u]]==0) return ans;
  
  dis[u]=Mind+1;
  
  gap[dis[www.gcyl159.com]]++;
  
  if(u!=sNode) www.gcyl152.com=edges[pre[u]^1].to; //退一条边
  
  }
  
  return ans;
  
  }
  
  }F;
  
  int N, M ;
  
  double d[MAXN];
  
  int tag[MAXN];
  
  int G[405][405];
  
  #define U (400 * 2100)
  
  bool check(double g)
  
  {
  
  int s = 0, t www.365soke.com= N+1;
  
  F.init();
  
  double flow = 0;
  
  for(int i=1;i<=N;++i){
  
  d[i] = 0.0;
  
  for(int j=1;j<=N;++j){
  
  if(i==j)
  
  continue;
  
  d[i] += G[i][j];//如果公式计算出来,边权跟g有关,就要加上相应的g
  
  F.AddEdge(i,j,G[i][j]);//如果公式计算出来,边权跟g有关,就要加上相应的g
  
  }
  
  }
  
  for(int i=1;i<=N;++i){
  
  if(tag[i]){
  
  flow += U + 2*g - d[i];//有点权的话,这个2*g还要再乘那个点权
  
  F.AddEdge(s, i, INF);
  
  }
  
  else{
  
  F.AddEdge(s,i,U);
  
  F.AddEdge(i,t, U + 2 * g - d[i]);//有点权的话,这个2*g还要再乘那个点权
  
  }
  
  }
  
  double hg = (U*N - flow - F.maxFlow_sap(s,t,t+1)) * 0.5;
  
  return hg > eps;
  
  }
  
  int A[MAXN];
  
  int main()
  
  {
  
  int T;
  
  scanf("%d",&T);
  
  for(int qqq=1;qqq<=T;qqq++){
  
  int u,v,w;
  
  memset(G,0,sizeof(G));
  
  scanf("%d",&N);
  
  for(int i=1;i<=N;i++)
  
  scanf("%d",&A[i]);
  
  for(int i=1;i<=N;++i){
  
  for(int j=i+1;j<=N;j++)
  
  if(A[j]<A[i])
  
  G[i][j] = G[j][i] = 1;//如果有边权,这里改成其他即可
  
  }
  
  for(int i=1;i<=N;++i){
  
  tag[i]=0;//必须用的话设为1
  
  }
  
  double L = 0, R = 200, mid;
  
  while(R - L >= eps){
  
  mid = (L+R) * 0.5;
  
  if(check(mid)) L = mid;
  
  else R = mid;
  
  }
  
  printf("Case #%d: %.10f\n",qqq,(L+R)*0.5);
  
  }
  
  return 0;

Gym - 100548C The Problem Needs 3D Arrays (最大密度子图)的更多相关文章

  1. Gym - 100548C The Problem Needs 3D Arrays

    Problem C.   The Problem Needs 3D Arrays Time Limit: 6000MS Memory Limit: 262144KB 64bit IO Format: ...

  2. 2014 西安 The Problem Needs 3D Arrays

    The Problem Needs 3D Arrays 题意:给你n个数, 然后1-n的数, 然后要求按顺序选出m个数, 求 逆序数/m 个数的 最大值是多少. 题解:裸的最大密度子图.逆序的2个数建 ...

  3. Uvalive 7037 The Problem Needs 3D Arrays(最大密度子图)

    题意:给一段子序列,定义密度:子序列中的逆序对数/子序列的长度 求这个序列的对大密度. 分析:将序列中的每个位置视作点,逆序对\(<i,j>\)之间表示点i与点j之间有一条无向边.所以就转 ...

  4. UVALive 7037:The Problem Needs 3D Arrays(最大密度子图)

    题目链接 题意 给出n个点,每个点有一个值,现在要选择一些点的集合,使得(选择的点生成的逆序对数目)/(选择的点的数量)的比率最大. 思路 点与点之间生成一个逆序对可以看做是得到一个边,那么就是分数规 ...

  5. 14西安区域赛C - The Problem Needs 3D Arrays

    最大密度子图裸题,详情请见胡博涛论文: https://wenku.baidu.com/view/986baf00b52acfc789ebc9a9.html 不加当前弧优化t到死= = //#prag ...

  6. POJ 3155 Hard Life 最大密度子图 最大权闭合图 网络流 二分

    http://poj.org/problem?id=3155 最大密度子图和最大权闭合图性质很相近(大概可以这么说吧),一个是取最多的边一个是取最多有正贡献的点,而且都是有选一种必须选另一种的限制,一 ...

  7. POJ 3155 Hard Life(最大密度子图)

    裸题.输入一个无向图,输出最大密度子图(输出子图结点数和升序编号). 看了<最小割模型在信息学竞赛中的应用——胡伯涛>的一部分,感觉01分数规划问题又是个大坑.暂时还看不懂. 参考http ...

  8. poj 3155 最大密度子图

    思路: 这个还是看的胡伯涛的论文<最小割在信息学竞赛中的应用>.是将最大密度子图问题转化为了01分数规划和最小割问题. 直接上代码: #include <iostream> # ...

  9. POJ3155 Hard Life [最大密度子图]

      题意:最大密度子图 #include<iostream> #include<cstdio> #include<cstring> #include<algo ...

随机推荐

  1. RabbitMQ八:交换机类型Exchange Types--Topic介绍

    前言 上一章节,我们说了两个类型,本章我们说一下其三:Topic Exchange Topic Exchange  Topic Exchange – 将路由键和某模式进行匹配.此时队列需要绑定要一个模 ...

  2. A8ERP管理系统(采购单管理)

    花了一个星期的时间终于把采购模块完成了. 最近新开发的采购单管理,供大家参考学习,软件一步一步来.

  3. 学JAVA第二十四天,Set集合与StringBuilder

    下面的内容需要慢慢看,因为,我的语言表达能力不是很好 首先说Set把,Set集合是一个无序且不允许重复的集合,而且查找效率也是快的可怕的. 但是,有些时候,我们必须要用储存多个相同的值时,Set也是可 ...

  4. 新建cordova应用

    使用命令行(本例命令行均使用as或webstrom的命令行),在任意目录输入以下命令新建cordova应用 cordova create capp1 com.cesc.ewater.capp1 其中c ...

  5. iOS中使用 Reachability 检测网络区分手机网络类型 WiFi 和2 3 4 G

    如果你想在iOS程序中提供一仅在wifi网络下使用(Reeder),或者在没有网络状态下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测. 写本文的目的 了解Re ...

  6. IOStime处理

    对时间处理,在开发时,时常碰到.一般有获取具体的年月日和星期,两个不同时间的差,某一天的前一天或后一天等 .现在只介绍获取具体的年月日和星期,及某一天的前一天或后一天的方法: 对时间的处理一般都会用到 ...

  7. InvocationTargetException异常的深入研究-servlet的setAttribute与getAttribute

    在某项目中,前端jsp传入的用户id数据通过session域传入后台servlet进行处理的过程中,无意间出现了InvocationTargetException异常 前端部分代码如下:测试代码,非原 ...

  8. 【Android】ListView中EditText焦点问题

    一.描述: 近期一个项目中需要开发一种类似表格的界面来显示和配置参数,Android并无直接类似表格的控件支持,我采用了ListView中布局EditText和TextView来实现,其中TextVi ...

  9. iOS代理模式

    iOS代理模式的简单理解:当一个对象无法直接获取到另一个对象的指针,又希望对那个变量进行一些操作时,可以使用代理模式. 代理主要由三部分组成: (1)协议:用来指定代理双方可以做什么,必须做什么. ( ...

  10. sql is null

    select * from a or state is null)