题目链接  2013杭州区域赛

Problem A

Problem B

这题我用的是SPFA+ mask dp

首先跑5次SPFA:

1次是求出每个起点和其他所有点的最短距离

4次是求出每个输入的点和其他所有点的最短距离

然后就是dp

设dp[mask][i]为,mask状态下,以i为终点的最优方案
然后做一遍状压DP即可。

#include <bits/stdc++.h>using namespace std;#define rep(i, a, b)   for (int i(a); i <= (b); ++i)
#define dec(i, a, b)    for (int i(a); i >= (b); --i)const int N = 103;
const int M = 1e4 + 10;
const int dx[] = {1, 0, -1, 0};
const int dy[] = {0, 1, 0, -1};bool inqueue[M], fl;
int c[N][N], f[6][6], a[M], d[M], dp[101][6];
char s[N][N];
int cnt, n, m, k;
vector <int> v[M];inline void addedge(int x, int y){v[x].push_back(y);v[y].push_back(x);
}void SPFA(int s){memset(inqueue, false, sizeof inqueue);rep(i, 1, cnt) d[i] = 1 << 29;d[s] = 0;queue <int> q;q.push(s);while (!q.empty()){int x = q.front();q.pop();inqueue[x] = false;for (auto u : v[x]){if (d[u] > d[x] + 1){d[u] = d[x] + 1;if (!inqueue[u]){inqueue[u] = true;q.push(u);}}}}
}int main(){while (~scanf("%d%d", &n, &m), n + m){rep(i, 1, n) scanf("%s", s[i] + 1);cnt = 0;rep(i, 1, n) rep(j, 1, m) c[i][j] = ++cnt;scanf("%d", &k);rep(i, 1, n) rep(j, 1, m) if (s[i][j] == '@'){a[k] = c[i][j];s[i][j] = '.';break;}rep(i, 0, k - 1){int x, y;scanf("%d%d", &x, &y);a[i] = c[x][y];}rep(i, 0, n * m + 1) v[i].clear();rep(i, 1, n){rep(j, 1, m) if (s[i][j] == '.'){rep(k, 0, 3){int x = i + dx[k], y = j + dy[k];if (s[x][y] == '.'){addedge(c[i][j], c[x][y]);}}}}SPFA(a[k]);rep(i, 0, k) rep(j, 0, k) f[i][j] = 1 << 29;rep(i, 0, k){SPFA(a[i]);rep(j, 0, k) if (i == j) f[i][j] = 0;else f[i][j] = d[a[j]];}rep(i, 0, 53)  rep(j, 0, 5) dp[i][j] = 1 << 29;rep(i, 0, k - 1) dp[1 << i][i] = f[i][k];rep(i, 1, ((1 << k) - 1)){if (__builtin_popcount(i) != 1){rep(j, 0, k - 1) if ((i >> j) & 1){rep(l, 0, k - 1) if (((i >> l) & 1) && (j != l)){dp[i][j] = min(dp[i][j], dp[i ^ (1 << j)][l] + f[j][l]);}}}}int ans = 1 << 30;rep(i, 0, k - 1) ans = min(ans, dp[(1 << k) - 1][i]);printf("%d\n", ans < 1e6 ? ans : -1);}return 0;
}

Problem C

跟着题意模拟一遍

关键是那个旋转要一次性写对

#include <bits/stdc++.h>using namespace std;#define rep(i, a, b) for (int i(a); i <= (b); ++i)
#define dec(i, a, b)    for (int i(a); i >= (b); --i)const int N = 41;int a[N][N], b[N][N];
int n;
int ans;void solve(){int c[N][N]; memset(c, 0, sizeof c);rep(i, 1, n) rep(j, 1, n) c[i][j] = a[j][n - i + 1];rep(i, 1, n) rep(j, 1, n) a[i][j] = c[i][j];
}int main(){while (~scanf("%d", &n), n){rep(i, 1, n) rep(j, 1, n) scanf("%d", &a[i][j]);rep(i, 1, n) rep(j, 1, n) scanf("%d", &b[i][j]);ans = 0;rep(p, 1, 4){solve();int now = 0;rep(i, 1, n) rep(j, 1, n) if (a[i][j] == b[i][j]) ++now;ans = max(ans, now);}printf("%d\n", ans);}return 0;
}

Problem D

Problem E

Problem F

Problem G

Problem H

Problem I

Problem J

Problem K

转载于:https://www.cnblogs.com/cxhscst2/p/7624709.html

2013 ACM/ICPC 亚洲区 杭州站相关推荐

  1. 2016 ACM/ICPC亚洲区青岛站现场赛(部分题解)

    摘要 本文主要列举并求解了2016 ACM/ICPC亚洲区青岛站现场赛的部分真题,着重介绍了各个题目的解题思路,结合详细的AC代码,意在熟悉青岛赛区的出题策略,以备战2018青岛站现场赛. HDU 5 ...

  2. 2012 ACM/ICPC 亚洲区 金华站

    题目链接  2012金华区域赛 Problem A 按a/b从小到大的顺序排队进行体检即可 1 #include<iostream> 2 #include<cstdio> 3 ...

  3. 2016ACM/ICPC亚洲区大连站现场赛题解报告(转)

    http://blog.csdn.net/queuelovestack/article/details/53055418 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原 ...

  4. HDU6218 2017ACM/ICPC亚洲区沈阳站 Bridge(Set,线段树)

    HDU6218 2017ACM/ICPC亚洲区沈阳站 Bridge Solution 我们考虑维护在环上的边的个数,答案就是总边数减去环上边数. 环的形态是这样的:(0,l),(0,l+1)...(0 ...

  5. 2016ACM/ICPC亚洲区大连站-补题

    2016ACM/ICPC亚洲区大连站-补题 5971-Wrestling Match 题目隐藏条件:除去已经知道的好人和坏人,如果剩余的人恰好被分成两组,即便不知道这两组哪组是好人,也是输出YES 做 ...

  6. 2016ACM/ICPC亚洲区大连站现场赛题解报告

    此文章可以使用目录功能哟↑(点击上方[+]) 下午重现了一下大连赛区的比赛,感觉有点神奇,重现时居然改了现场赛的数据范围,原本过的人数比较多的题结果重现过的变少了,而原本现场赛全场过的人最少的题重现做 ...

  7. 2016ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)

    目录 A Thickest Burger B Relative atomic mass C Recursive sequence · 矩阵快速幂 E Counting Cliques · 暴力 H G ...

  8. 暑期ACM模拟赛--2017ACM/ICPC亚洲区沈阳站-重现赛 【待补】

    A - BBP Formula HDU - 6217 (数学问题+公式推导+快速幂) F - Heron and His Triangle HDU - 6222  (数学问题+海伦公式+大数) I - ...

  9. 2013 ACM/ICPC Asia Regional Chengdu Online We Love MOE Girls 字符串STL 的应用

    题目来源: http://acm.hdu.edu.cn/showproblem.php?pid=4730 分析1:string s.substr(pos, n) 从 pos 开始 截取n个 字符 代码 ...

最新文章

  1. c语言 串口中断服务函数,GCC-AVR 编写中断服务函数的注意事项
  2. c语言的运算答案,C语言运算符与表达式的练习题答案.doc
  3. Struts Web应用程序开发步骤
  4. 图像PSNR值及MSE值的计算
  5. [Leetcode][第79题][JAVA][单词搜索][DFS][回溯]
  6. android webview es6,Android v 5.0 webview HTML5,CSS3和ES6兼容性
  7. SCCM 2012远程控制
  8. 图像处理---《在图片上打印文字 FreeType库》
  9. 高危bash漏洞来袭,小心你的服务器!
  10. 使用源码安装 PostgreSQL 12.5 主从集群
  11. maven更换阿里云源
  12. UE4之UMG用户界面
  13. 01企业网络高级解决方案
  14. python条形堆积图_python – 带有中心标签的堆积条形图
  15. DP转HDMI方案|CS5216方案应用|CS5216设计方案
  16. 知乎:有哪些让你相见恨晚的 PPT 制作技术或知识?
  17. 部件mscomctl_mscomctl.ocx下载_mscomctl.ocx官方下载【32位64位】-太平洋下载中心
  18. [刷题]2017百度之星资格赛 - 度度熊与邪恶大魔王
  19. tiny core linux网络连接,用Tiny Core Linux打造纯Firefox上网系统(概要)
  20. (翻译)Fully Automated Deep Learning System for Bone Age Assessment

热门文章

  1. Python打造一款多线程端口扫描器
  2. 游戏场景中的建筑设计,专访暴雪娱乐首席美术师 PhilipKlevestav
  3. The world at your fingertips — 天涯明月刀幕后(后记)
  4. pmp每日三题(2022年3月4日)
  5. 《时间管理:如何充分利用你的24小时》—让你时间发挥最大效用
  6. 源哥每日一题第十三弹 百练4124:海贼王之伟大航路 状压dp
  7. shell--printf
  8. Android android:screenOrientation的简介
  9. silverlight 使用IValueConverter 转换
  10. 菜单工具栏wxPython菜单与工具栏基础示例