• HDU 5037 Frog(贪心)


    题意比较难懂,一只青蛙过河,它最多一次跳L米,现在河中有石头,距离不等,上帝可以往里加石头,青蛙非常聪明,它一定会选择跳的次数最少的路径。问怎么添加石头能让青蛙最多的次数。输出青蛙跳的最多的次数。

    考虑对于长度L+1,上帝一定会让青蛙跳两次。那么只需要尽可能的构造L+1就行了。那么就需要求多少个L+1就行了。还有就是需要记录上一次跳的距离,如果上一次跳的距离加上这次的距离小于L+1的话,那么上次一定会跳到当前这个点,而不是跳到上次那个点,所以更新一下上次的距离。也就是这两种情况:

    1)上一步pre加这一步余数y大于L,则最后剩余部分需要单独跳;

    2)上一步pre加这一步余数y小于等于L,最后剩余部分可以并进上一步,即pre+y。

    代码如下:

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int maxn = 2 * 1e5 + 10;
    int a[maxn];
    int main()
    {
        int T, n, m, L, kase = 0;
        scanf("%d", &T);
        while (T--)
        {
            scanf("%d %d %d", &n, &m, &L);
            for (int i = 1; i <= n; i++)
                scanf("%d", &a[i]);
            a[0] = 0; a[++n] = m;
            sort(a, a + n);
            int ans = 0, pre = L;
            for (int i = 1; i <= n; i++)
            {
                int x = (a[i] - a[i - 1]) / (L + 1);
                int y = (a[i] - a[i - 1]) % (L + 1);
                if (y + pre >= L + 1)
                {
                    pre = y;
                    ans += 2 * x + 1;
                }
                else
                {
                    pre = pre + y;
                    ans += 2 * x;
                }
            }
            printf("Case #%d: %d
    ", ++kase, ans);
            
        }
        
        return 0;
    }
  • 相关阅读:
    python面试题总结与分析(一)
    Word2vec ------算法岗面试题
    深度学习(二)-----算法岗面试题
    深度学习(一)-------算法岗面试题
    模型融合和提升的算法------算法面试题
    前后端交互3 发送消息1
    前后端交互2 vuex存储token
    前后端交互1
    4.弹出层组件的实现与封装
    3. 聊天列表页面的实现
  • 原文地址:https://www.cnblogs.com/Howe-Young/p/4834654.html
Copyright © 2020-2023  润新知