UVa11157 - Dynamic Frog(动态规划)

Withthe increased use of pesticides, the local streams and rivers have become socontaminated that it has become almost impossible for the aquatic animals tosurvive.

Frog Fred is on the left bank of such a river. Nrocks are arranged in a straight line from the left bank to the right bank. Thedistance between the left and the right bank is D meters. There arerocks of two sizes. The bigger ones can withstand any weight but the smallerones start to drown as soon as any mass is placed on it. Fred has to go to theright bank where he has to collect a gift and return to the left bank where hishome is situated.

He can land on every small rock at most one time,but can use the bigger ones as many times as he likes. He can never touch thepolluted water as it is extremely contaminated.

Can you plan the itinerary so that the maximumdistance of a single leap is minimized?

 

Input

The first line of input is an integer T(T<100) that indicatesthe number of test cases. Each case starts with a line containing two integers N(0≤N≤100)and D(1≤D≤1000000000). The next line gives the descriptionof the N stones. Eachstone is defined by S-M. Sindicates the type Big(B) or Small(S)and M(0<M<D)determines the distance of that stone from the left bank. The stones will begiven in increasing order of M.

Output

For every case, output the case number followed by the minimized maximumleap.

Sample Input

Output for Sample Input

3
1 10
B-5
1 10
S-5
2 10
B-3 S-6
Case 1: 5
Case 2: 10
Case 3: 7
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>

using namespace std;

const int N = 110;

int memo[N][N];

struct Rock
{
    char kind;
    int size;
};

Rock rock[N];
int n, d;

bool input();
int solve();
int dp(int i, int j);

int main()
{
#ifndef ONLINE_JUDGE
    freopen("d:\\OJ\\uva_in.txt", "r", stdin);
#endif // ONLINE_JUDGE

    int t;
    scanf("%d", &t);
    for (int i = 1; i <= t; i++) {
        input();
        int ans = solve();
        printf("Case %d: %d\n", i, ans);
    }

    return 0;
}

bool input()
{
    scanf("%d", &n);
    rock[0].kind = 'B', rock[0].size = 0;
    rock[n + 1].kind = 'B';
    scanf("%d", &rock[n + 1].size);

    for (int i = 1; i <= n; i++) {
        scanf(" %c-%d", &rock[i].kind, &rock[i].size);
    }

    return true;
}

int solve()
{
    memset(memo, 0xff, sizeof(memo));
    return dp(0, 0);
}

int dp(int i, int j)
{
    int &res = memo[i][j];

    if (res != -1) return res;

    res = 1 << 30;
    if (i > n && j > n) return res = 0;

    if (i <= j) {
        for (int t = i; t <= n + 1; t++) {
            if (t == j && rock[t].kind != 'B') continue;
            res = min(res, max(rock[t].size - rock[i].size, dp(t, j)));
        }
    } else {
        for (int t = j; t <= n + 1; t++) {
            if (t == i && rock[t].kind != 'B') continue;
            res = min(res, max(rock[t].size - rock[j].size, dp(i, t)));
        }
    }

    return res;
}



乐播投屏是一款简单好用、功能强大的专业投屏软件,支持手机投屏电视、手机投电脑、电脑投电视等多种投屏方式。 多端兼容与跨网投屏:支持手机、平板、电脑等多种设备之间的自由组合投屏,且无需连接 WiFi,通过跨屏技术打破网络限制,扫一扫即可投屏。 广泛的应用支持:支持 10000+APP 投屏,包括综合视频、网盘与浏览器、美韩剧、斗鱼、虎牙等直播平台,还能将央视、湖南卫视等各大卫视的直播内容一键投屏。 高清流畅投屏体验:腾讯独家智能音画调校技术,支持 4K 高清画质、240Hz 超高帧率,低延迟不卡顿,能为用户提供更高清、流畅的视觉享受。 会议办公功能强大:拥有全球唯一的 “超级投屏空间”,扫码即投,无需安装。支持多人共享投屏、远程协作批注,PPT、Excel、视频等文件都能流畅展示,还具备企业级安全加密,保障会议资料不泄露。 多人互动功能:支持多人投屏,邀请好友加入投屏互动,远程也可加入。同时具备一屏多显、语音互动功能,支持多人连麦,实时语音交流。 文件支持全面:支持 PPT、PDF、Word、Excel 等办公文件,以及视频、图片等多种类型文件的投屏,还支持网盘直投,无需下载和转格式。 特色功能丰富:投屏时可同步录制投屏画面,部分版本还支持通过触控屏或电视端外接鼠标反控电脑,以及在投屏过程中用画笔实时标注等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值