Vijos 1456 最小总代价 (状压dp)
看到这道题n只有16,就可以想到状压dp
每个人只有经过或者没经过,那就用1表示经过,0表示没经过
但是不是当前在谁那里,所以再加一维来记录
所以f[state][i]表示在物品在i,当前的状态是state情况下的最小总代价
有几个细节要注意
(1)刷表法。要提前初始化为-1,然后然后每个起点为0.。做的时候要判断当前状态存不存在。
(2)之前状态存在,当前这个人不存在才可以去做。
#include<cstdio>
#include<cstring>
#include<algorithm>
#define REP(i, a, b) for(int i = (a); i < (b); i++)
#define _for(i, a, b) for(int i = (a); i <= (b); i++)
using namespace std;
const int MAXN = 20;
int g[MAXN][MAXN], f[(1<<16)+10][MAXN], n;
int main()
{
scanf("%d", &n);
REP(i, 0, n)
REP(j, 0, n)
scanf("%d", &g[i][j]);
memset(f, -1, sizeof(f));
REP(i, 0, n) f[1<<i][i] = 0;
int ans = 1e9;
REP(i, 0, 1 << n)
REP(j, 0, n)
if(f[i][j] != -1)
REP(k, 0, n)
if(!(i & (1 << k)))
{
int& state = f[i | (1 << k)][k];
if(state == -1) state = f[i][j] + g[j][k];
else state = min(state, f[i][j] + g[j][k]);
if((i | (1 << k)) == ((1 << n) - 1)) ans = min(ans, state);
}
printf("%d\n", ans);
return 0;
}
Vijos 1456 最小总代价 (状压dp)的更多相关文章
- 最小总代价 状压DP
描述 n个人在做传递物品的游戏,编号为1-n. 游戏规则是这样的:开始时物品可以在任意一人手上,他可把物品传递给其他人中的任意一位:下一个人可以传递给未接过物品的任意一人. 即物品只能经过同一个人一次 ...
- vijo 1456最小总代价
题意:中文题... 题解:状态比较多,可以说是状压的基础题吧,我们定义dp[i][j],j为一个二进制数,每位0表示接触过该物品,1表示没有接触过;j表示当前物品在谁手上.递推的顺序注意一下就好 ac ...
- 【vijos】1286 座位安排(状压dp)
https://vijos.org/p/1286 这题好神不会捉... 首先我们知道所有情况有C(n*m, k)种,这个好搞.但是两两不相邻这个有点难搞.. 原来是状压dp..sigh. 设状态f[i ...
- HDU 1565 - 方格取数(1) - [状压DP][网络流 - 最大点权独立集和最小点权覆盖集]
题目链接:https://cn.vjudge.net/problem/HDU-1565 Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32 ...
- BZOJ_1097_[POI2007]旅游景点atr_状压DP
BZOJ_1097_[POI2007]旅游景点atr_状压DP 题面描述: FGD想从成都去上海旅游.在旅途中他希望经过一些城市并在那里欣赏风景,品尝风味小吃或者做其他的有趣 的事情.经过这些城市的顺 ...
- [转]状态压缩dp(状压dp)
状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴. 为了更好的理解状压dp,首先介绍位运算相关的 ...
- NOIP2017 宝藏 题解报告【状压dp】
题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘所有宝藏屋中的宝藏.但是 ...
- [NOIP2017]宝藏 状压DP
[NOIP2017]宝藏 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖 ...
- NOIP2017宝藏 [搜索/状压dp]
NOIP2017 宝藏 题目描述 参与考古挖掘的小明得到了一份藏宝图,藏宝图上标出了 n 个深埋在地下的宝藏屋, 也给出了这 n 个宝藏屋之间可供开发的 m 条道路和它们的长度. 小明决心亲自前往挖掘 ...
随机推荐
- 移植Mplayer到OK6410开发板
移植Mplayer到OK6410开发板 作者:vasage 项目需要,需要将Mplayer移植到开发板上,所以今天花了一下下午成功移植,其中参考很多文档,后发现许多文档陈旧,些许文档有少量错误,所以这 ...
- django-5-自定义模板过滤器及标签
<<<代码布局(自定义的代码放哪里)>>> (1)某个app特有的 1.一般放app目录下 固定名为templatetags 的python文件夹里鸭,如果是别的 ...
- centos solr 集群搭建
一.什么是 SolrCloud SolrCloud(solr 云)是 Solr 提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时 ...
- BA-siemens-PXC模块调试
PXC24模块写地址步骤: 1.制作一根HMI线: 2.通过HMI+232转USB转接卡连接模块: 3.根据已经做好的系统架构表来配置模块: 写模块之前不要忘了格式化模块,主要命令如下: 视频教程:h ...
- C#中的IEnumerable<T>知识点
1.扩展IEnumerable<T>的方法 使继承了IEnumeralbe<T>的接口有了MyS方法 static class MySum { ...
- NEFU 109
n最大为2000000000(不知为什么OJ上是1000),若为判断2000000000是素数,则必有一个素数在sqrt(n)内,求出这个范围 的所有素数,其比最大数据小的n'的sqrt(n')也在这 ...
- USACO 1.2 Transformations (模拟)
模拟题目,依照题目给定的要求变换图形就可以,变换的优先级依次减小. 这个题目我写的非常乱.只是最还还是勉强能够执行 /* ID:twd30651 PROG:transform LANG:C++ */ ...
- Android调用第三方App
private List<Map<String, Object>> list = null; private PackageManager mPackageManager; p ...
- HDU 1042.N!【高精度乘法】【8月24】
N! Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N ...
- weblogic状态监控脚本
echo "======================================welcome============================================ ...