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 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快 ...
随机推荐
- jquery获取input值的各种情况
jQuery获取多种input值的方法 获取input的checked值是否为true: 第一种: if($("input[name=item][value='val']").at ...
- java纯数字加密解密实例
我们都知道,在用户加入信息时,一些比較敏感的信息,如身份证号,手机号,用户的登录password等信息,是不能直接明文存进数据库的.今天我们就以一个详细的样例来说明一下纯数字的java加密解密技术. ...
- Servlet的引入
一.分析 此模式有问题: 1.jsp需要呼叫javabean StudentService stuService = new StudentServiceImpl(); List<Student ...
- 关于集成支付宝SDK的开发
下载 首先,你要想找到这个SDK,都得费点功夫.如今的SDK改名叫移动支付集成开发包了,下载页面在 这里 的 "请点此下载集成开发包" Baidu和Googlep排在前面的支付宝开 ...
- windows 目录空格
Window下安装Scala出现:此时不应有 \scala\bin\..\lib\jline-2.14.5.jar 原因很简单,scala默认安装到了Program Files (x86)文件夹下,目 ...
- mysql 查询语句去重 通过sql去重
url 在表中具有唯一性: 由于定时任务的多进程/代码的多线程/定时任务的调度/脚本的执行时间,导致,破坏了唯一性: SELECT COUNT(1) FROM test_error_tmpUNION ...
- 记录下docker的常用命令
常用命令: docker images:查看本地所有镜像 docker pull centos:7:从仓库中获取镜像 docker ps:列出所有正在运行的容器 docker ps -a:列出所有容 ...
- html5--项目实战-仿天猫(移动端页面)
html5--项目实战-仿天猫(移动端页面) 总结: 1.标准搜索栏的做法:这里是弹性布局,放大镜和小话筒是background img 2.手机尾部导航做法:这是一个个 li 标签,每个li标签占% ...
- 【HAOI 2008】 硬币购物
[题目链接] 点击打开链接 [算法] 此题是一道好题! 首先,我们发现 : 付款方法数 = 不受限制的方法数 - 受限制的方法数 那么,我们怎么求呢? 我们用dp求出不受限制的方法数(f[i]表示买i ...
- codeforces 125 A-E 补题
A Measuring Lengths in Baden 进制转换 水题 #include<bits/stdc++.h> using namespace std; int main() { ...