http://acm.hdu.edu.cn/showproblem.php?pid=4939

给出一条长为n个单位长度的直线,每通过一个单位长度需要 t 秒。

有3种塔,红塔可以在当前格子每秒造成 x 点伤害,绿塔可以在之后的格子每秒造成 y 点伤害,蓝塔可以使通过单位长度的时间增加 z 秒。(if you are already pass through k blue towers, the enemy should have took t + k*z seconds every unit length.)问如何安排3种塔的顺序使得造成的伤害最大,输出最大伤害值。

显然红塔在前面没有在后面造成的伤害大,那么只剩下蓝塔和绿塔的分配,考虑使用dp

dp[i][j]表示前 i + j 格种了i个绿塔j个蓝塔,那么转移方程就可以写出了,再种一个蓝塔多出的伤害是i * y * (t + (j - 1) * z) , 多种一个绿塔多出的伤害是(i - 1) * y * (t + j * z)

dp[i][j] = max(dp[i - 1][j] + (i - 1) * y * (t + j * z) , dp[i][j - 1] + i * y * (t + (j - 1) * z));

剩下的就是红塔,那么答案就是max( dp[i][j] + (x + (i * y)) * (n - i - j) * (t + j * z) )

#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <string>
#include <queue>
#include <vector>
#include<set>
#include <iostream>
#include <algorithm>
using namespace std;
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define clr0(x) memset(x,0,sizeof(x))
typedef long long LL;
LL f[2005][2005];
int main()
{
int _;RD(_);
for(int tt = 1;tt <= _;++tt){
int n,x,y,z,t;
scanf("%d%d%d%d%d",&n,&x,&y,&z,&t);
clr0(f);LL ans = 0;
for(int i = 0;i <= n;i++){
for(int j = 0;j + i <= n;j++){
if (i)
f[i][j] = max(f[i][j], f[i - 1][j] + 1LL * (i - 1) * y * (t + j * z));
if (j)
f[i][j] = max(f[i][j], f[i][j - 1] + 1LL * i * y * (t + (j - 1) * z));
LL rest = 1LL * (x + (i * y)) * (n - i - j) * (t + j * z);
ans = max(ans, rest + f[i][j]);
}
}
printf("Case #%d: %I64d\n",tt,ans);
}
return 0;
}

hdu 4939 三色塔防的更多相关文章

  1. Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(三)

    一.前提: 完成前一篇的内容. 具体参考:Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)篇 二.本篇目标: l  说说游戏中各种角色的动作.属性以及重构思路 l  进行代码重构让色狼大叔和 ...

  2. HDU 4939 Stupid Tower Defense(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4939 解题报告:一条长度为n的线路,路上的每个单元格可以部署三种塔来给走在这条路上的敌人造成伤害,第一 ...

  3. dp --- hdu 4939 : Stupid Tower Defense

    Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/ ...

  4. Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)

    一.前提: 完成前一篇的内容. 具体参考:Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(一)篇 二.本篇目标: l  说说关于cocos2dx手机分辨率适配 l  对前一篇完成的塔防游戏原型进 ...

  5. Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(一)

    一.前提: 完成Hello Game项目的创建编译. 具体参考:Cocos2dx.3x_Hello Game项目创建篇 二.本篇目标: l  说说关于塔防游戏的想法和思路 l  实现一个简单的塔防游戏 ...

  6. [译]终极塔防——运用HTML5从头创建一个塔防游戏

    翻译共享一篇CodeProject的高星力作,原文地址:http://www.codeproject.com/Articles/737238/Ultimate-Tower-Defense 下载演示项目 ...

  7. 使用Unity创建塔防游戏(Part2)

    How to Create a Tower Defense Game in Unity – Part 2 原文地址:https://www.raywenderlich.com/107529/unity ...

  8. 使用Unity创建塔防游戏(Part1)

    How to Create a Tower Defense Game in Unity - Part1 原文作者:Barbara Reichart 文章原译:http://www.cnblogs.co ...

  9. 使用unity创建塔防游戏(原译)(part1)

    塔防游戏非常地受欢迎,木有什么能比看着自己的防御毁灭邪恶的入侵者更爽的事了. 在这个包含两部分的教程中,你将使用Unity创建一个塔防游戏. 你将会学到如何: 创建一波一波的敌人 使敌人随着路标移动 ...

随机推荐

  1. PAT 1049 数列的片段和(20)(代码+思路分析)

    1049 数列的片段和(20)(20 分) 给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段.例如,给定数列{0.1, 0.2, 0.3, 0.4},我们有(0.1) (0.1, 0.2 ...

  2. 用户态处理arp、ndisc neighbour solication 报文

    问题背景: 想要协议栈给不是接口ip的报文,ipv4回复arp request,ipv6回复 ndisc solication. #include <stdio.h> //调用该函数成为一 ...

  3. \\Device\\PhysicalMemory

    从Windows Server 2003 with SP1 以后就禁用了用户态访问\\Device\\PhysicalMemory,要访读取SMBIOS的信息,请使用以下API:•EnumSystem ...

  4. Python之路(第二篇):Python基本数据类型字符串(一)

    一.基础 1.编码 UTF-8:中文占3个字节 GBK:中文占2个字节 Unicode.UTF-8.GBK三者关系 ascii码是只能表示英文字符,用8个字节表示英文,unicode是统一码,世界通用 ...

  5. jquery或者JavaScript调用WCF服务的方法

    /****************************************************************** * Copyright (C): 一心堂集团 * CLR版本: ...

  6. jquery单行文字上下循环滚动

    html代码: <div class="box"> <div class="t_news"> <b>已关联奖励账号.昵称:& ...

  7. 【UI测试】--快捷键组合

  8. Oracle 12c的可插拔数据库PDB

    1. 默认安装之后会有一个可插拔数据库:pdborcl 2. 启动根容器: [oracle@eric ~]$ export ORACLE_SID=orcl [oracle@eric ~]$ sqlpl ...

  9. NOIP水题测试(2017082401)

    哈,水题测试又来了! 上次的水题简单吧! 答案是以单题形式发布的(旅行家的预算随后发布). 下面来看今天的题,还是水题. 时间限制:5小时 题目一:看上去就很水 题目二:比上面一题还水 题目三:数的划 ...

  10. 697. Degree of an Array

    static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ...