题目描述

n个人在做传递物品的游戏,编号为1-n。

游戏规则是这样的:开始时物品可以在任意一人手上,他可把物品传递给其他人中的任意一位;下一个人可以传递给未接过物品的任意一人。

即物品只能经过同一个人一次,而且每次传递过程都有一个代价;不同的人传给不同的人的代价值之间没有联系;

求当物品经过所有n个人后,整个过程的总代价是多少。

输入输出格式

输入格式:

第一行为n,表示共有n个人(16>=n>=2);

以下为n*n的矩阵,第i+1行、第j列表示物品从编号为i的人传递到编号为j的人所花费的代价,特别的有第i+1行、第i列为-1(因为物品不能自己传给自己),其他数据均为正整数(<=10000)。

输出格式:

一个数,为最小的代价总和。

输入输出样例

输入样例#1:

2
-1 9794
2724 –1

输出样例#1:

2724

思路:状压 DP 入门题

每个人只能被传递一次,用一个 n 位二进制数来表示每个人是否被访问过,但这无法知道物品在谁手中,因此加一个状态,来表示物品在谁手中。

用 f[i][j] 表示在 i 状态时最后的一个是 j,初始状态为 f[1<<i][i]=0;表示一开始物品在i手中,所求状态为 min(f[(1<<n)-1][j]);  因此有转移方程:f[i][j]=min(f[i-(1<<j)][k]+cost[k][j],f[i][j])

k 表示从 k 点转移到了 j 位置,所以要求 j、k 都应该是集合 i 中的元素

源代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<string>
#include<cstdlib>
#include<queue>
#include<set>
#include<map>
#include<stack>
#include<ctime>
#include<vector>
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define N 1001
#define MOD 10007
#define E 1e-6
#define LL long long
using namespace std;
LL f[1<<17][20],cost[20][20];
int main()
{int n;cin>>n;for(int i=0;i<n;i++)for(int j=0;j<n;j++)cin>>cost[i][j];/*标识状态初始化*/memset(f,127,sizeof(f));for(int i=0;i<n;i++)f[1<<i][i]=0;int cnt=(1<<n)-1;for(int i=1;i<=cnt;i++){for(int j=0;j<n;j++){if(i&(1<<j)){for(int k=0;k<n;k++){if( j!=k && (i&(1<<k)) )//k在状态i中不存在{LL x=(i-(1<<j));f[i][j]=min(f[x][k]+cost[k][j],f[i][j]);}}}}}LL minn=INF;for(int i=0;i<n;i++)minn=min(minn,f[cnt][i]);cout<<minn<<endl;return 0;
}

最小总代价(洛谷-U17433)相关推荐

  1. (最小割)洛谷P4474 王者之剑

    洛谷P4474 王者之剑 思路: 显然求二分图最大权独立点集. 把点进行黑白染色. SSS向白点建边,权值为vi,jv_{i,j}vi,j​; 白点向周围的黑点建边,权值为infinfinf; 黑点向 ...

  2. (最小割)洛谷P4313文理分科

    洛谷P4313文理分科 思路: 一下子就可以想到最小割,先不考虑一起选的情况的话,就是文理二者择其一的选择. SSS向(i,j)(i,j)(i,j)建边,权值为arti,jart_{i,j}arti, ...

  3. (最小割)洛谷P1361 小M的作物

    洛谷P1361 小M的作物 思路: 这是一个两者取一的模型,将点集一分为二. 最小割在数值上等同于最大流.割去权值和最小的边,使图分成两部分,割下来的边权值和为最小割. 对于此题,先不考虑种在一起的情 ...

  4. 网络流_最小割_洛谷P1345

    题目: 题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,-,a©,且a1与a2相 ...

  5. 霍夫曼树之切割木板最小总代价问题

    对于本题的切割方案,在给出了最终的切割结果后,我们其实可以使用倒推的方法,将最终的小木板不断合成大木板,大木板的长度就是本次合并的开销,和相同条件下的切割的开销是一样的. 这样想的话,想要总开销小的话 ...

  6. 2018.07.17 洛谷P1368 工艺(最小表示法)

    传送门 好的一道最小表示法的裸板,感觉跑起来贼快(写博客时评测速度洛谷第二),这里简单讲讲最小表示法的实现. 首先我们将数组复制一遍接到原数组队尾,然后维护左右指针分别表示两个即将进行比较的字符串的头 ...

  7. 【洛谷1361】 小M的作物(最小割)

    传送门 洛谷 Solution 这是一个比较实用的套路,很多题目都有用,而且这个套路难以口胡出来. 考虑把每一个附加贡献重新建一个点,然后向必需的点连边,流量为val. 然后直接种植的从源点向这个点连 ...

  8. 【洛谷4001】 [ICPC-Beijing 2006]狼抓兔子(最小割)

    传送门 洛谷 Solution 直接跑最小割板子就好了. 代码实现 #include<stdio.h> #include<stdlib.h> #include<strin ...

  9. POJ3349,洛谷SP4354-SnowflakeSnowSnowflakes【最小表示法,hash】

    正题 洛谷评测记录:https://www.luogu.org/recordnew/lists?uid=52918&pid=SP4354 POJ题目链接:http://poj.org/prob ...

最新文章

  1. Google Play服务中的人脸检测
  2. ACM之【文件操作】
  3. Numpy 排序 -- sort()、argsort()
  4. SpringAMQP--消息转换器
  5. 什么才是尊重自己呢?
  6. 转usb驱动cmw500 ni_支持USB Type-C接口的外置蓝光驱动器IO Data BRP-UT6 / MC2本月发售...
  7. jhat命令 Java Heap Analyse Tool
  8. 深度学习:词嵌入Embedding
  9. nginx 四种策略
  10. 中国食品安全检测市场专项调研及投资前景预测报告2022-2027年
  11. 【知识点】关于axis的理解(python)
  12. Spark的位置优先: TaskSetManager 的有效 Locality Levels
  13. rsyslog+elk 网络设备日志收集及钉钉报警
  14. 到底多大并发才算高并发?一文带你全面认识高并发!
  15. ip变更造成的redis集群不可用的解决及数据备份和恢复
  16. 《前端》JavaScript总结
  17. win10系统无法连接远程服务器,笔者修复win10系统无法连接远程服务器的图文教程...
  18. ECharts 示例——双Y轴(一)
  19. 【Python】 网格策略回测(日内高频数据)
  20. 问题处理 IAR Warning[Pe186]: pointless comparison of unsigned integer with zero。

热门文章

  1. window系统下的堆栈溢出 作者:ipxodi
  2. 说说我在制造业大厂当了一个月程序员的感受
  3. 一个@Transaction哪里来这么多坑?
  4. 你看,公司状告员工不加班,居然还告赢了
  5. JEECG 社区官方技术支持
  6. jeecg公开培训课马上开始8点30
  7. Linux下安装配置Nexus
  8. 苹果面向Mac发布英特尔处理器漏洞缓解措施
  9. Android自定义抛出异常
  10. 前端特效demo | 值得收藏的6个 HTML5 Canvas 实用案例