hdu 4939 Stupid Tower Defense (dp)

题目大意:

简单的塔防游戏,有三种塔。

一种是减速塔,只能减速它身后的敌人,使之移动速度减慢。通过一格的时间变成加z秒。

两种攻击塔,一种只能打面前,另外一种可以打身后。

思路分析:

我们默认把只能攻击面前的塔放到最后面。

状态方程: dp [i] [j]  表示放到第 i 个位置放了 j 个防御塔能达到的最大伤害。

转移方程:dp [i] [j] =max ( dp[i-1][j] + buildy ,  dp[i-1][j-1] + buildz )

buildy 表示第 i 位置建一个 攻击塔使后面多出来的伤害。

buildz 表示第 i 位置建一个 减速塔使后面多出来的伤害。

怎么计算buildy buildz  就是通过减去之前的伤害然后重新计算伤害 。

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define maxn 1505

using namespace std;
typedef long long ll;

ll dp[maxn][maxn];

int main()
{
    ll n,x,y,z,t;
    int cas=1;
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%I64d%I64d%I64d%I64d%I64d",&n,&x,&y,&z,&t);
        memset(dp,0,sizeof dp);
        dp[0][0]=n*x*t;
        for(int i=1;i<=n;i++)
        {
            for(int j=0;j<=i;j++)
            {
                if(j==0)
                {
                    dp[i][j]=t*((2*n-i-1)*i/2)*y+(n-i)*t*x;
                }
                else
                {
                    ll buildz = dp[i-1][j-1]-(n-i+1)*(t+z*(j-1))*x+(n-i)*((t+z*(j-1))+z)*x-(n-i)*(i-j)*y*(t+(z*(j-1)))+(n-i)*(i-j)*y*(t+z*j);
                    if(i==j)buildy=(t+j*z)*(n-i)*x;
                    else buildy = dp[i-1][j]-(n-i+1)*(t+z*j)*x+(n-i)*(t+z*j)*x+(n-i)*(t+z*j)*y;
                    dp[i][j]=max(buildz,buildy);
                }
            }
        }
        ll ans=0;
        for(int i=0;i<=n;i++)
        for(int j=0;j<=i;j++)
        {
            ans=max(ans,dp[i][j]);
        }
        printf("Case #%d: %I64d\n",cas++,ans);
    }
    return 0;
}

hdu 4939 Stupid Tower Defense (dp)

时间: 2024-08-23 09:33:37

hdu 4939 Stupid Tower Defense (dp)的相关文章

2014多校第七场1005 || HDU 4939 Stupid Tower Defense (DP)

题目链接 题意 :长度n单位,从头走到尾,经过每个单位长度需要花费t秒,有三种塔: 红塔 :经过该塔所在单位时,每秒会受到x点伤害. 绿塔 : 经过该塔所在单位之后的每个单位长度时每秒都会经受y点伤害. 蓝塔 : 经过该塔所在单位之后,再走每个单位长度的时候时间会变成t+z. 思路 : 官方题解 : 1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #define LL long long

hdu 4939 Stupid Tower Defense(DP)2014多校训练第7场

Stupid Tower Defense                                                                         Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Problem Description FSF is addicted to a stupid tower defense game. Th

HDU 4939 Stupid Tower Defense(dp)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4939 解题报告:一条长度为n的线路,路上的每个单元格可以部署三种塔来给走在这条路上的敌人造成伤害,第一种塔只给在这个塔的范围内的敌人每秒造成x点的伤害,第二种塔给已经经过过这个塔的敌人每秒造成y点伤害,第三种塔能使已经经过了这个塔的敌人的前进的速度减慢,具体效果是,原来敌人经过一个单元格的时间是t秒,经过减速后,经过每个单元格的时间是t + z,这个一个塔减速的效果,减速的效果可以叠加,同样,第二种

HDOJ题目4939 Stupid Tower Defense(dp)

Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1759    Accepted Submission(s): 498 Problem Description FSF is addicted to a stupid tower defense game. The goal of tower

HDU 4939 Stupid Tower Defense(贪心+dp)

HDU Stupid Tower Defense 题目链接 题意:有一些塔,红塔能攻击经过他的,绿塔能攻击经过之后的,蓝塔能把经过之后的减速,求在1-n上放塔,求伤害最大值 思路:一开始以为直接贪心,绿塔最前,蓝塔中间,红塔最后就可以了,结果其实是错的 不过,红塔放最后是肯定的,这个很显然就不多证明了,是贪心的思想 然后就dp[i][j]表示放到i,前面有j个绿塔去状态转移即可 代码: #include <cstdio> #include <cstring> #include &l

hdu4939 Stupid Tower Defense (DP)

2014多校7 第二水的题 4939 Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 366    Accepted Submission(s): 88 Problem Description FSF is addicted to a stupid tower defense game.

hdu4939Stupid Tower Defense(DP)

题目:hdu4939Stupid Tower Defense(DP) 题目大意:保卫游戏.给出一条长度n的道路,这条道路上每个单元长度可以放一个塔.现在有三种塔:红塔:怪经过这个塔的时候受到X的伤害每秒.绿塔:怪经过这个塔之后,以后的每秒都受到Y的伤害.蓝塔:怪经过这个塔后,之后每经过单元长度的时间加长为t + Z:问怎样选择这三种塔能够使得伤害值最大. 解题思路:一开始没有想到这是DP, 看了题解才发现放塔的时候红塔应该放在最后面最优,那么就只要放蓝绿塔就行,而且前面哪个位置放了蓝绿塔对后面是

hdu 4939 Stupid Tower Defense ( dp )

题目链接 题意:给出一条长为n个单位长度的直线,每通过一个单位长度需要t秒. 有3种塔,红塔可以在当前格子每秒造成x点伤害,绿塔可以在之后的格子每秒造成y点伤害, 蓝塔可以使通过单位长度的时间增加z秒.问如何安排3种塔的顺序使得造成的伤害最大,输出最大伤害值. 分析:比赛的时候实在是没有想出来有三种不同的 塔,每种塔的作用不同,怎么dp.看题解才知道,应该把 所有的红塔放到最后面,因为直线的长度是一定的,而红塔在前面不会增加后面的伤害,然后问题就是如何安排 绿塔和蓝塔,我这里d[i][j]代表前

dp --- hdu 4939 : Stupid Tower Defense

Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1219    Accepted Submission(s): 361 Problem Description FSF is addicted to a stupid tower defense game. The goal of tower