USACO 3.3.3
来源:互联网 发布:微信网络怎么报警 编辑:程序博客网 时间:2024/06/05 00:44
很恶心的搜索...纠结了两天.
本来是一个简单的最短路问题,直接BFS或者SPFA或者什么别的都可以,但是题目中增加了王.而王的行动方式有三种:
1.王在骑士的路上,和骑士到汇合点
2.王走到骑士的路上,和骑士到汇合点
3.王自己去汇合点
前两种情况可以合并成一种,f[i,j][x,y]+f[x,y][m,n]-f[i,j][m,n]+max(abs(king.x-x),abs(king.y-y))
枚举每个骑士的出发点[i,j]和汇合点[m,n],以及王和骑士的交汇点[x,y],计算王到交汇点[x,y]需要走的距离.-f[i,j][m,n]可以视为将被枚举骑士走的路线重新计算(显然骑士原来走的距离是[i,j][m,n]).
第三种情况,王自己走过去的话就直接max(abs(king.x-m),abs(king.y-n)),加上总距离,取最小值即可.
一个比较重要的剪枝是,王和骑士的交汇点在王坐标±2的范围内,似乎是大牛们实验得出的结果.
需要特别说明的是坐标,题目中的r表示行数,c表示列数,后面的字母表示所在列,字母表示所在行.
需要注意的是,此类题目必须先建立并分析好大致模型,然后编写,进而剪枝,采用迭代式开发.
BTW,USACO不支持函数名重载,因此自己写abs的话会和<stdlib.h>里的abs冲突,进而编译错误.
Executing...
Test 1: TEST OK [0.011 secs, 6476 KB]
Test 2: TEST OK [0.011 secs, 6476 KB]
Test 3: TEST OK [0.011 secs, 6480 KB]
Test 4: TEST OK [0.043 secs, 6476 KB]
Test 5: TEST OK [0.205 secs, 6480 KB]
Test 6: TEST OK [0.313 secs, 6476 KB]
Test 7: TEST OK [0.011 secs, 6476 KB]
Test 8: TEST OK [0.011 secs, 6480 KB]
Test 9: TEST OK [0.119 secs, 6476 KB]
Test 10: TEST OK [0.464 secs, 6476 KB]
Test 11: TEST OK [0.022 secs, 6480 KB]
Test 12: TEST OK [0.000 secs, 6480 KB]
Test 13: TEST OK [0.022 secs, 6480 KB]
Test 14: TEST OK [0.000 secs, 6476 KB]
Test 15: TEST OK [0.011 secs, 6476 KB]
Test 16: TEST OK [0.011 secs, 6476 KB]
Test 17: TEST OK [0.022 secs, 6480 KB]
Test 18: TEST OK [0.011 secs, 6476 KB]
Test 19: TEST OK [0.011 secs, 6476 KB]
Test 20: TEST OK [0.000 secs, 6476 KB]
All tests OK.
Your program ('camelot') produced all correct answers! This is your
submission #7 for this problem. Congratulations!
[Code]
- USACO 3.3.3
- USACO 3.3.3 camelot
- USACO 3.3.3 Camelot
- USACO 3.3.3
- USACO 3.3.3 Camelot
- usaco Chapter 3 section 3.3 Shopping Offers
- usaco Chapter 3 section 3.3 Camelot
- usaco Chapter 3 section 3.3 A game
- USACO 3.3.3 Packing Rectangles (packrec)(转)
- USACO 3.3.2
- USACO 3.3.5
- usaco 3.3 Shopping Offers
- usaco 3.3 A Game
- USACO 3.3 A Game
- USACO 3.3 Camelot
- USACO 3.3.1
- USACO 3.3.2
- USACO 3.3.4
- 打个前站
- 运算符重载
- usaco 1.1:Your Ride Is Here
- Windows下开发HID设备主机程序(续)
- 用户控件与页面执行顺序
- USACO 3.3.3
- 字符串字母对调
- 字符串字母对调
- c操作单链表
- 一些TC内置的环境环境变量(注意字母必须大写,且只能在TC内用)
- usaco 1.1:Greedy Gift Givers
- 字符串字母对调
- Google Protocol Buffers安装、使用二三事
- 一种用div实现js二层节点折叠的方法