[DP][NOI2000]青蛙过河
2018-01-28 22:26
309 查看
洛谷原题
Codevs原题
【大意】一些荷叶(一次只能站一个青蛙),一些石墩(叠加站在石墩上)。对岸有个B石墩(到B就不能走了)。编号i为青蛙叠加跳到石墩上必须踩在i-1的青蛙上。因此青蛙到达B(B是个石墩)的顺序也必须是X,X-1,X-2...3,2,1,题目是求解这个X.
【解法】递推(DP)
F[i][j]表示i个石墩j个荷叶能通过多少蛙
先看 F[0][j],1个石墩j个荷叶,最大青蛙跳到B,剩下的蛙跳到j个荷叶上,再依次跳到B,因此是j+1
F[1][j],1个石墩j个荷叶,最优应该是让青蛙占D1去(当成B跳,可以跳F[0][j]个),再占B,因此是F[0][j] * 2
F[2][j],2个石墩j个荷叶,最优应该是让青蛙再占D2(D2当成B,可以跳F[1][j],因为还有D1),再占D1(F[0][j]),最后再占B(F[0][j]),因此是F[1][j] + F[0][j] *2
...
F[i][j] = f[0][j]+f[1][j]+f[2][j]+..+f[i-1][j];
可以一步计算为:2^i * f[0][j] = (1<<i) * (m+1)
#include <iostream>
using namespace std;
int n, m; //石墩 & 荷叶
int main() {
cin >> n >> m;
cout << (1 << n) * (m + 1);
return 0;
}
(可以看出,M起不到很大作用)
Codevs原题
【大意】一些荷叶(一次只能站一个青蛙),一些石墩(叠加站在石墩上)。对岸有个B石墩(到B就不能走了)。编号i为青蛙叠加跳到石墩上必须踩在i-1的青蛙上。因此青蛙到达B(B是个石墩)的顺序也必须是X,X-1,X-2...3,2,1,题目是求解这个X.
【解法】递推(DP)
F[i][j]表示i个石墩j个荷叶能通过多少蛙
先看 F[0][j],1个石墩j个荷叶,最大青蛙跳到B,剩下的蛙跳到j个荷叶上,再依次跳到B,因此是j+1
F[1][j],1个石墩j个荷叶,最优应该是让青蛙占D1去(当成B跳,可以跳F[0][j]个),再占B,因此是F[0][j] * 2
F[2][j],2个石墩j个荷叶,最优应该是让青蛙再占D2(D2当成B,可以跳F[1][j],因为还有D1),再占D1(F[0][j]),最后再占B(F[0][j]),因此是F[1][j] + F[0][j] *2
...
F[i][j] = f[0][j]+f[1][j]+f[2][j]+..+f[i-1][j];
可以一步计算为:2^i * f[0][j] = (1<<i) * (m+1)
#include <iostream>
using namespace std;
int n, m; //石墩 & 荷叶
int main() {
cin >> n >> m;
cout << (1 << n) * (m + 1);
return 0;
}
(可以看出,M起不到很大作用)
相关文章推荐
- 【NOI 2000】青蛙过河
- 洛谷P1244 [NOI2000] 青蛙过河 [2017年4月计划 动态规划07]
- 【NOI 2000】青蛙过河
- HRBUST 1186 青蛙过河(dp)
- 2017北理校赛H题 青蛙过河(线段树, dp, 离散化)
- Hust oj 1186 青蛙过河(dp)
- 哈理工训练赛 青蛙过河 dp
- HUBUST 1186 青蛙过河(dp)
- hrbust 1186 青蛙过河【Dp】
- hlg1186青蛙过河【dp】
- 哈理工OJ 1186 青蛙过河 (DP问题)
- 动态规划 DP leetcode403 青蛙过河问题
- hlg1186青蛙过河【dp】
- hdu4843 [noi2000] 古城之谜 (Trie+dp)
- 【DP】哈理工oj-1186-青蛙过河
- [OpenJudge-NOI]最低通行费 Dp
- luogu P1809 过河问题_NOI导刊2011提高(01)
- bzoj2878 [Noi2012]迷失游乐园 [树形dp]
- BZOJ 4197([Noi2015]寿司晚宴-状压dp)
- 1007 青蛙过河