2017团体程序设计天梯赛大区赛 L3-3 球队“食物链”
思路:
状压dp。
实现:
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int N = ; char a[N][N];
int n, s, t, ans[N + ], mp[N][N];
int dp[( << N) + ][N];
int path[( << N) + ][N];
bool ok = false; int dfs(int S, int now)
{
if (dp[S][now] != -)
return dp[S][now];
if (S == ( << n) - )
{
if (mp[now][s])
{
t = now;
return ok = ;
}
return ;
}
for (int i = ; i < n; i++)
{
if (ok)
continue;
if (!(S & ( << i)) && mp[now][i])
{
int res = dfs(S | ( << i), i);
path[S][now] = i;
if (res)
return dp[S][now] = ;
}
}
return dp[S][now] = (ok ? - : );
} void getPath()
{
int p = << s;
ans[] = s;
int i = ;
for (int j = ; j < n; j++)
{
ans[i++] = s = path[p][s];
p |= ( << s);
}
} int main()
{
cin >> n;
for (int i = ; i < n; i++)
{
for (int j = ; j < n; j++)
{
cin >> a[i][j];
if (a[i][j] == 'W')
mp[i][j] = ;
else if (a[i][j] == 'L')
mp[j][i] = ;
}
}
memset(dp, -, sizeof(dp));
for (int i = ; i < n; i++)
{
s = i;
dfs( << i, i);
if (ok)
break;
}
if (!ok)
{
cout << "No Solution" << endl;
}
else
{
getPath();
for (int i = ; i < n; i++)
{
cout << ans[i] + ;
if (i != n - )
cout << " ";
}
puts("");
}
return ;
}
2017团体程序设计天梯赛大区赛 L3-3 球队“食物链”的更多相关文章
- 团体程序设计天梯赛(CCCC) L3021 神坛 的一些错误做法(目前网上的方法没一个是对的) 和 一些想法
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3019 代码排版 方法与编译原理密切相关,只有一个测试点段错误
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3015 球队“食物链” 状态压缩
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...
- 团体程序设计天梯赛(CCCC) L3014 周游世界 BFS证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3013 非常弹的球 不同思路
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 团体程序设计天梯赛(CCCC) L3012 水果忍者 上凸或下凹的证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code #include <cstdio> #include ...
- 团体程序设计天梯赛(CCCC) L3009 长城 方法证明
团体程序设计天梯赛代码.体现代码技巧,比赛技巧. https://github.com/congmingyige/cccc_code
- 树状数组+二分答案查询第k大的数 (团体程序设计天梯赛 L3-002. 堆栈)
前提是数的范围较小 1 数据范围:O(n) 2 查第k大的数i:log(n)(树状数组查询小于等于i的数目)*log(n)(二分找到i) 3 添加:log(n) (树状数组) 4 删除:log(n) ...
- PTA L2-001 紧急救援-最短路(Dijkstra)多条最短路找最优解并输出路径 团体程序设计天梯赛-练习集
L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...
随机推荐
- LightOJ - 1317 Throwing Balls into the Baskets 期望
题目大意:有N个人,M个篮框.K个回合,每一个回合每一个人能够投一颗球,每一个人的命中率都是同样的P.问K回合后,投中的球的期望数是多少 解题思路:由于每一个人的投篮都是一个独立的事件.互不影响.所以 ...
- C++常用的函数,好的博客文章整理,集锦
http://www.cnblogs.com/xianghang123/archive/2011/08/24/2152404.html c语言产生随机数的方法 http://blog.sina. ...
- Node-webkit 介绍
什么是Node-webkit ? Node-webkit 是Intelproject师rogerwang写的一个基于node.js和chromium的应用程序执行环境,通过node-webkit,我们 ...
- sublime text 3 乱码
sublime text 是一款很好用的文字编辑软件,可谓是程序员必备,但是最近发现在mac端使用的时候,中文乱码, 网上一些解决方案,抄袭严重,没有解决实际问题,所以记录下自己解决问题的过程. 1. ...
- yummain.py install yum 不能运行的原因 yummain.py not found
[root@akinlau ~] wget http://tel.mirrors.163.com/centos/6/os/x86_64/Packages/python-urlgrabber-3.9.1 ...
- 利用chrome调试手机网页
1.pc端安装最新的chrome 2.手机端安装最新的chrome ( Android机 )ms不需要 3.USB连接线 4.打开电脑的chrome 在地址栏输入 chrome://inspect
- socket.io实现在线群聊
我自己在用socket.io开发,对官方网站上的文档,进行简单的整理,然后自己写了一个简单的聊天程序.最最开始 先安装socket.io: npm install socket.io 利用Node的搭 ...
- 【ZJOI 2006】 物流运输
[题目链接] 点击打开链接 [算法] 令cost(i,j) = 第i天到第j天走相同的路线,路线长度的最小值 那么,只需筛选出第i天到第j天可以装卸货物的码头,然后将这些码头之间连边,跑弗洛伊德(或其 ...
- WebUploader上传大文件时,上传出错问题
上传普通文件没有问题,当文件达到一定大小的时候,上传错误,返回结果是404,我可以肯定的是路径是没有问题的.因为上传小文件等都是可以的. 然后使用webuploader的uploaderror监控错误 ...
- 【193】◀▶ PowerShell 官方资料索引
Microsoft.PowerShell.Core 模块 Windows PowerShell 核心 Cmdlet Windows PowerShell 核心函数 Windows PowerShell ...