P1244 NOI2000青蛙过河 [思维题]

青 蛙 过 河 青蛙过河

题目见标题链接 .


正 解 部 分 \color{red}{正解部分}

开始前先说明 若跳到 B B B 点, 则不能跳出 .

F [ i , j ] F[i, j] F[i,j] 表示 i i i 个石墩, j j j 个荷叶的最优答案,

首先 F [ 0 , j ] = j + 1 F[0, j] = j+1 F[0,j]=j+1, 这很直观 , 然后考虑 F [ 1 , j ] F[1, j] F[1,j] 的值,
现在中间有一个石墩, 设为 D D D, 从起点先跳到 D D D, 然后从起点跳到终点, 再把 D D D 点的青蛙跳到 终点,
可以得到 F [ 1 , j ] = F [ 0 , j ] + F [ 0 , j ] = 2 ∗ F [ 0 , j ] F[1, j] = F[0, j] + F[0, j] = 2*F[0,j] F[1,j]=F[0,j]+F[0,j]=2F[0,j] .

再考虑 F [ 2 , j ] F[2, j] F[2,j] 的值, F [ 2 , j ] = F [ 1 , j ] + F [ 0 , j ] + F [ 0 , j ] = 4 ∗ F [ 0 , j ] F[2, j] = F[1, j] + F[0, j] + F[0, j] = 4*F[0, j] F[2,j]=F[1,j]+F[0,j]+F[0,j]=4F[0,j]
同理 F [ 3 , j ] = F [ 2 , j ] + F [ 1 , j ] + F [ 0 , j ] + F [ 0 , j ] = 8 ∗ F [ 0 , j ] F[3, j] = F[2, j] + F[1, j] + F[0, j] + F[0, j]=8*F[0,j] F[3,j]=F[2,j]+F[1,j]+F[0,j]+F[0,j]=8F[0,j],
以此类推可得 F [ i , j ] = 2 i ∗ F [ 0 , j ] = 2 i ∗ ( j + 1 ) . F[i, j] = 2^i * F[0,j] = 2^i*(j+1). F[i,j]=2iF[0,j]=2i(j+1).


实 现 部 分 \color{red}{实现部分}

#include
#define reg register

int h;
int k;

int main(){
        scanf("%d%d", &h, &k);
        printf("%d\n", (1<<h) * (k+1));
        return 0;
}

你可能感兴趣的:(思维题,Second)