当前位置: 首页 > news >正文

(中等) HDU 4370 0 or 1,建模+Dijkstra。

  Description

  Given a n*n matrix C ij (1<=i,j<=n),We want to find a n*n matrix X ij (1<=i,j<=n),which is 0 or 1.

  Besides,X ij meets the following conditions:

1.X 12+X 13+...X 1n=1
2.X 1n+X 2n+...X n-1n=1
3.for each i (1<i<n), satisfies ∑X ki (1<=k<=n)=∑X ij (1<=j<=n).

  For example, if n=4,we can get the following equality:

X 12+X 13+X 14=1
X 14+X 24+X 34=1
X 12+X 22+X 32+X 42=X 21+X 22+X 23+X 24
X 13+X 23+X 33+X 43=X 31+X 32+X 33+X 34

  Now ,we want to know the minimum of ∑C ij*X ij(1<=i,j<=n) you can get.

 

  神题,可以转化为最短路问题。这个题可以一点一点的分析,首先就是选了第一行的第k个之后,就要选一个第k行的,所以建边 1->k 边权为第一行第k个的值,然后求1->n的最短路就好。。。。。。

  不过这里还有一种特殊情况,就是1和其他形成一个环,N和其他形成一个环。所以答案就是两个环的和,和最短路中小的那一个。。。

 

代码如下:

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
    
using namespace std;

const int MaxN=400;
const int INF=10e8;

void Dijkstra(int cost[][MaxN],int lowcost[],int N,int start)
{
    priority_queue <int> que;
    int t;

    for(int i=1;i<=N;++i)
        lowcost[i]=INF;

    que.push(start);

    while(!que.empty())
    {
        t=que.top();
        que.pop();

        for(int i=1;i<=N;++i)
            if(i!=t)
                if(lowcost[t]==INF || lowcost[i]>lowcost[t]+cost[t][i])
                {
                    lowcost[i]=(lowcost[t]==INF ? 0 : lowcost[t])+cost[t][i];
                    que.push(i);
                }
    }
}

int map1[MaxN][MaxN];
int ans[MaxN];

int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);

    int N;
    int t1,t2;

    while(~scanf("%d",&N))
    {
        for(int i=1;i<=N;++i)
            for(int j=1;j<=N;++j)
                scanf("%d",&map1[i][j]);

        Dijkstra(map1,ans,N,1);
        t1=ans[N];
        t2=ans[1];

        Dijkstra(map1,ans,N,N);
        t2+=ans[N];

        printf("%d\n",min(t1,t2));
    }
    
    return 0;
}
View Code

 

转载于:https://www.cnblogs.com/whywhy/p/4337893.html

相关文章:

  • iOS 实现文件的拷贝
  • 如何实现.so共享库文件
  • 关于四则运算程序的测试
  • 软件工程师的属性与发展
  • MVC 外网 上传 下载 实现方式(一)
  • asp.net Ajax Post 请求一般处理程序
  • 我的博客开通了!
  • ASP.NET MVC3默认提供了11种ActionResult的实现
  • 实现GetHashCode时要遵循的规则
  • 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts
  • 用linqPad帮助你快速学习LINQ
  • Cacti监控Tomcatserver实现过程
  • C++ 多继承与虚基类
  • Set集合
  • Solr4.7从数据库导数据
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Apache Spark Streaming 使用实例
  • C++类的相互关联
  • iOS小技巧之UIImagePickerController实现头像选择
  • js写一个简单的选项卡
  • MYSQL 的 IF 函数
  • React Transition Group -- Transition 组件
  • vue2.0项目引入element-ui
  • Vue官网教程学习过程中值得记录的一些事情
  • 对超线程几个不同角度的解释
  • 什么软件可以剪辑音乐?
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • # Apache SeaTunnel 究竟是什么?
  • #Linux(权限管理)
  • %check_box% in rails :coditions={:has_many , :through}
  • (07)Hive——窗口函数详解
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (补)B+树一些思想
  • (二)WCF的Binding模型
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (接口封装)
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (区间dp) (经典例题) 石子合并
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @Service注解让spring找到你的Service bean
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [14]内置对象
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [BT]BUUCTF刷题第8天(3.26)
  • [C/C++] C/C++中数字与字符串之间的转换
  • [C++]C++入门--引用
  • [C++]类和对象【上篇】
  • [C语言]——函数递归
  • [Git 1]基本操作与协同开发
  • [iOS]随机生成UUID通用唯一识别码