【XDOJ】小W的塔防
原题:
小W在成功拿到iPhone后,下载了一个塔防游戏。游戏的目标是阻止僵尸穿过地图。
地图可以看作一条长度为n的线段,这条线段被划分为n条单位长度的小线段。僵尸需要花费t秒才能通过一条小线段。在每条小线段中,小W可以放置1个塔。塔有3种:
红色塔,每秒对正在通过塔的敌人造成x点伤害。
绿色塔,每秒对已经通过塔的敌人造成y点伤害。
蓝色塔,使已经通过塔的敌人减速,需要多花费z秒才能通过1单位长度。
“正在通过”定义为僵尸处于塔所在的单位长度小线段,“已经通过”定义为僵尸已经离开了这条小线段。
绿色塔、蓝色塔的效果可以叠加。换句话说,如果一个僵尸已经通过了a个绿色塔,b个蓝色塔,它将每秒受到来自绿色塔的ay点伤害,并且花费t+bz秒才能通过1单位长度。
小W希望知道,他至多可以给僵尸造成多少伤害。
1<=n<=100,0<=x,y,z<=60000,1<=t<=3
n很小,冰塔和毒塔的数量又不可能超过n
所以一眼f[i][j][k] n^3 DP,表示僵尸走到第i个线段,踩了j个毒塔,k个冰塔能吃掉的最大伤害
但是我没有1A,问题在哪里呢
一开始我是这样写的
- for(int i=;i<=n;++i)
- for(int j=;j<=i;++j)
- for(int k=;j+k<=i;++k){
- f[i][j][k]=max(f[i][j][k],f[i-][j][k]+(x+j*y)*(t+k*z));
- if(j) f[i][j][k]=max(f[i][j][k],f[i-][j-][k]+(j-)*y*(t+k*z));
- if(k) f[i][j][k]=max(f[i][j][k],f[i-][j][k-]+j*y*(t+(k-)*z));
- }
然后f初值是0
结果样例没过,因为这样子有可能从f[0][1][0]转移到f[1][1][0]
然后我草率地把j<=i和j+k<=i改成j<i和j+k<i
显然这样是不对滴,注意j和k表示的是走过第i个线段时,踩了j个毒塔k个冰塔,之前的表述是不清楚的
喜闻乐见地WA了
正确改法应该是f初值全设-INF,f[0][0][0]设成0
突然想起来这个做法还是挺常见的,用来防止非法状态乱入
可能是退坑一年忘了吧哈哈
代码:
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #include<cmath>
- using namespace std;
- long long n,x,y,z,t;
- long long f[][][];
- void rvs(){
- for(int i=;i<=n;++i)
- for(int j=;j<=n;++j)
- for(int k=;k<=n;++k)
- f[i][j][k]=-9999999999999999LL;
- f[][][]=;
- return ;
- }
- int main(){
- //freopen("ddd.in","r",stdin);
- while(scanf("%lld%lld%lld%lld%lld",&n,&x,&y,&z,&t)!=EOF){
- rvs();
- for(int i=;i<=n;++i)
- for(int j=;j<=i;++j)
- for(int k=;j+k<=i;++k){
- f[i][j][k]=max(f[i][j][k],f[i-][j][k]+(x+j*y)*(t+k*z));
- if(j) f[i][j][k]=max(f[i][j][k],f[i-][j-][k]+(j-)*y*(t+k*z));
- if(k) f[i][j][k]=max(f[i][j][k],f[i-][j][k-]+j*y*(t+(k-)*z));
- }
- long long ans=;
- for(int i=;i<=n;++i)
- for(int j=;j<=n;++j)
- ans=max(ans,f[n][i][j]);
- printf("%lld\n",ans);
- }
- return ;
- }
【XDOJ】小W的塔防的更多相关文章
- 自定义View5 -塔防小游戏:第二篇防御塔随意放置
第一篇:一个防御塔+多个野怪(简易版) 第二篇:防御塔随意放置 自定义View,处理事件分发,up,move,down. 第三篇:防御塔随意放置+多组野怪 第四篇:多波野怪 第五篇:杀死野怪获得金币 ...
- Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(三)
一.前提: 完成前一篇的内容. 具体参考:Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)篇 二.本篇目标: l 说说游戏中各种角色的动作.属性以及重构思路 l 进行代码重构让色狼大叔和 ...
- Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)
一.前提: 完成前一篇的内容. 具体参考:Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(一)篇 二.本篇目标: l 说说关于cocos2dx手机分辨率适配 l 对前一篇完成的塔防游戏原型进 ...
- Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(一)
一.前提: 完成Hello Game项目的创建编译. 具体参考:Cocos2dx.3x_Hello Game项目创建篇 二.本篇目标: l 说说关于塔防游戏的想法和思路 l 实现一个简单的塔防游戏 ...
- 一款类似塔防类的保卫羊村游戏android源码
一款类似塔防类的保卫羊村游戏源码,这个游戏很像我们平时玩的塔防游戏的,游戏的源码比较完整的,大家可以修改一下或者添加一些广告就可以上线到应用商店了,而且这个游戏目前已经上线国内的一些应用商店了,360 ...
- 使用Unity创建塔防游戏(Part2)
How to Create a Tower Defense Game in Unity – Part 2 原文地址:https://www.raywenderlich.com/107529/unity ...
- 使用Unity创建塔防游戏(Part1)
How to Create a Tower Defense Game in Unity - Part1 原文作者:Barbara Reichart 文章原译:http://www.cnblogs.co ...
- 使用unity创建塔防游戏(原译)(part1)
塔防游戏非常地受欢迎,木有什么能比看着自己的防御毁灭邪恶的入侵者更爽的事了. 在这个包含两部分的教程中,你将使用Unity创建一个塔防游戏. 你将会学到如何: 创建一波一波的敌人 使敌人随着路标移动 ...
- SpriteKit塔防游戏动态改变防御塔价格标签的颜色
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 本篇blog在DinoDefense塔防游戏基础之上做一处小的 ...
随机推荐
- Tensorflow 用训练好的模型预测
本节涉及点: 从命令行参数读取需要预测的数据 从文件中读取数据进行预测 从任意字符串中读取数据进行预测 一.从命令行参数读取需要预测的数据 训练神经网络是让神经网络具备可用性,真正使用神经网络时,需要 ...
- Unreal Engine* 4/英特尔® VTune™ Amplifier 使用指南
借助英特尔 VTune Amplifier,可以通过单一易用的分析界面获得先进的分析功能.UE4 和英特尔 VTune Amplifier 相互配合,支持调查代码并进行分析,从而在多个内核上顺畅运行. ...
- flask的cookies操作
from flask import Flask,request,Response app = Flask(__name__) @app.route('/') def hello_world(): re ...
- 阿里云服务器 lnmp安装流程
nginx安装:wget http://nginx.org/download/nginx-1.12.2.tar.gztar zxvf nginx-1.12.2.tar.gzcd nginx-1.12. ...
- PAT A1016 Phone Bills (25)
题目描述 A long-distance telephone company charges its customers by the following rules: Making a long-d ...
- 给定进制下1-n每一位数的共享(Digit sum)The Preliminary Contest for ICPC Asia Shanghai 2019
题意:https://nanti.jisuanke.com/t/41422 对每一位进行找循环节规律就行了. #define IOS ios_base::sync_with_stdio(0); cin ...
- linux下selenium+phantomjs环境
# 安装依赖软件yum -y install wget fontconfig # 下载PhantomJSwget -P /tmp/ https://bitbucket.org/ariya/phanto ...
- 并不对劲的复健训练-p5212 SubString
题目大意 有一个串\(s\),一开始只知道它的一个前缀.有\(q\)(\(q\leq 10^4\))个操作,操作有两种:1.给一个字符串,表示\(s\)(\(s\)总长\(\leq 6\times 1 ...
- 03docker镜像
docker的镜像操作 Union文件系统是Docker镜像的基础. UnionFS(联合文件系统):Union文件系统是一种分层,轻量级并且高性能的文件系统.它支持对文件系统的修改作为一次提交来一层 ...
- 【原创】大叔经验分享(73)scala akka actor
import java.util.concurrent.{ExecutorService, Executors, TimeUnit} import akka.actor.{Actor, ActorSy ...