JAVA学习45_51Nod-1489-蜥蜴和地下室
2017-02-21 15:46
260 查看
描述
题解
首先将头尾的两个弓箭手打爆,然后dfs中间的弓箭手即可。 这里需要注意,每次往后搜索
N+1的条件是,第
N-1个弓箭手已经被A死了,但是第
N个弓箭手不要求必须死。
因为这里数据很小,所以dfs暴力搜索是可以AC的……
代码
#include <iostream> using namespace std; const int INF = 0x3f3f3f3f; const int MAXN = 11; int res = 0; // 打爆首尾需要的次数 int res_2 = INF;// 打爆中间的需要的最少次数 int n, a, b; int H[MAXN]; // 生命值 // 暴力深搜 void dfs(int N, int ans) { // 当到达第n个人时,更新最少的爆破次数,并返回 if (N == n) { res_2 = res_2 > ans ? ans : res_2; return ; } // 每次向后搜索都要保证第N-1个为负数 if (H[N - 1] < 0) { dfs(N + 1, ans); } int times = 0; // 必须在第N位置爆times次才能保证第N-1个为负数 if (H[N - 1] >= 0) { times = H[N - 1] / b + 1; H[N - 1] -= b * times; H -= a * times; H[N + 1] -= b * times; dfs(N + 1, ans + times); H[N - 1] += b * times; H += a * times; H[N + 1] += b * times; } // 只要爆times~times_次都能保证第N-1个为负数 int times_ = H / a + 1; if (H >= 0 && times_ > times) { for (int i = times + 1; i <= times_; i++) { H[N - 1] -= b * i; H -= a * i; H[N + 1] -= b * i; dfs(N + 1, ans + i); H[N - 1] += b * i; H += a * i; H[N + 1] += b * i; } } return ; } int main(int argc, const char * argv[]) { // freopen("/Users/zyj/Desktop/input.txt", "r", stdin); cin >> n >> a >> b; for (int i = 1; i <= n; i++) { cin >> H[i]; } // 打爆第1个 int times = H[1] / b + 1; res += times; H[1] -= b * times; H[2] -= a * times; H[3] -= b * times; // 打爆第n个 if (H >= 0) { times = H / b + 1; res += times; H -= b * times; H[n - 1] -= a * times; H[n - 2] -= b * times; } dfs(2, 0); // 保证res_2是有效次数 if (res_2 == INF) { res_2 = 0; } std::cout << res + res_2 << '\n'; return 0; }
原文来自:http://www.voidcn.com/blog/f_zyj/article/p-6141511.html
相关文章推荐
- 51nod 1489 蜥蜴和地下室 dfs
- 51Nod-1489 蜥蜴和地下室(暴力DFS)
- 蜥蜴和地下室 51Nod - 1489
- 1489 蜥蜴和地下室 51NOD
- 51nod 1489 蜥蜴和地下室(dfs or dp)
- 51Nod 1489 蜥蜴和地下室
- 51nod 1489 蜥蜴和地下室
- 51nod 1489 蜥蜴和地下室
- 51Nod 1489 蜥蜴和地下室
- 51nod 1489蜥蜴和地下室
- 51Nod-1489-蜥蜴和地下室
- 【51Nod】1489 - 蜥蜴和地下室(dfs)
- 51Nod-1489-蜥蜴和地下室
- 51Nod 1489 蜥蜴和地下室 DFS
- 51nod 1489 蜥蜴和地下室(dfs)
- 51nod 1489 蜥蜴和地下室 暴力dfs
- 51nod 1489 蜥蜴和地下室(DFS)
- 51nod 1489 蜥蜴和地下室 dfs
- Androidx学习笔记(45)--- 获取文件的后缀名(java基本语法)
- Java学习笔记45:Java 线程与主线程之间的变量关系