• day1 LGTB玩THD


    先贴出原题:

    LGTB 最近在玩一个类似DOTA 的游戏名叫THD
    有一天他在守一座塔,对面的N 个小兵排成一列从近到远站在塔前面
    每个小兵有一定的血量hi,杀死后有一定的金钱gi
    每一秒,他都可以攻击任意一个活着的小兵,对其造成P 点伤害,如果小兵的血量低于1 点,小兵死亡,他
    得到金钱。他也可以不攻击任何小兵。
    每一秒LGTB 攻击完毕之后,塔会攻击距离塔最近的一个活着的小兵,对其造成Q 点伤害,如果小兵的血
    量低于1 点,小兵死亡,LGTB 不会得到金钱
    现在LGTB 想知道,在他选择最优策略时,他能得到多少钱。
    输入
    输入第一行包含3 个整数P, Q, N
    接下来N 行,每行包含2 个整数hi, gi
    第i 个小兵和塔之间的距离为i
    输入的意义如题面所示
    对于20% 的数据,1  N  4
    对于50% 的数据,1  N  20
    对于100% 的数据,20  P,Q  200, 1  N  100, 1  hi  200, 0  gi  106
    输出
    输出包含一个整数W,代表LGTB 最多能获得的金钱

    没想到出题者居然知道THD。。。难以置信。。。难道也是东方厨~(≧▽≦)/~好了好了,回归正题,这道题拿到后简直一脸懵逼,想写DP奈何想不出方程,直接不管随便写了个DFS,连条件都没去思考,居然过了25分,,,这题的正解呢,当然就是DP啦,f[i][j]表示第i个兵自己在后面能打J枪所能取得的最大金钱,下面贴出代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    struct bing
    {
        int h,g,t,m;
    };
    bing v[502];
    int p,q,n;
    int s[102][2002];
    int main()
    {
        freopen("thd.in","r",stdin);
        freopen("thd.out","w",stdout);
        scanf("%d%d%d",&p,&q,&n);
        for (int i=1;i<=n;i++)
        {
            scanf("%d%d",&v[i].h,&v[i].g);
            v[i].t=(v[i].h-1)/q;
            v[i].m=(v[i].h-v[i].t*q-1)/p+1;
        }
        for (int i=0;i<=n;i++)
        {
            for (int j=0;j<1002;j++)
            {
                s[i][j]=-1000000000;
            }
        }
        s[0][1]=0;
        for (int i=1;i<=n;i++)
        {
            for (int j=0;j<1002;j++)
            {
                if (s[i][j+v[i].t+1]<s[i-1][j])
                {
                    s[i][j+v[i].t+1]=s[i-1][j];
                }
                if (j>=v[i].m-v[i].t)
                {
                    if (s[i][j-v[i].m+v[i].t]<s[i-1][j]+v[i].g)
                    {
                        s[i][j-v[i].m+v[i].t]=s[i-1][j]+v[i].g;
                    }
                }
            }
        }
        int ans=0;
        for (int i=0;i<1002;i++)
        {
            if (s[n][i]>ans)
            {
                ans=s[n][i];
            }
        }
        printf("%d
    ",ans);
        return 0;
    }

    清清正正射命丸文是也~

  • 相关阅读:
    (一)单例模式
    mysql数据库知识
    JavaScript
    Spring整合AspectJ的AOP
    Spring-AOP
    JDK代理和CGLIB代理
    mybatis-dao开发
    mybatis-入门
    CSS2.1
    HTML基础
  • 原文地址:https://www.cnblogs.com/Ayateriteri/p/5671547.html
Copyright © 2020-2023  润新知