hdu 4939 Stupid Tower Defense 2014多校七 DP
生活随笔
收集整理的這篇文章主要介紹了
hdu 4939 Stupid Tower Defense 2014多校七 DP
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:hdu 4939
? ? ? ? 一個塔防游戲:給定一條長度為n的直線,要在每一個格點都造塔,小怪每走一個格點需要t秒鐘,現在提供給你三種塔:(1)非常耿直的紅色塔,僅僅當怪物經過該點時造成每秒x點傷害;(2)帶詛咒的綠塔,經過該點時不造成傷害,經過之后直到走完全程造成每秒y點傷害(傷害可疊加);(3)塔防中肯定有的減速藍塔,經過時沒有效果,經過之后怪物每走一個格點都需要額外的z秒(減速效果同樣可疊加)。問現在造塔能怪物走完全程最大能造成多少傷害。
? ? ? ? 紅色塔太耿直,只有一次作用,而且綠藍塔對當前經過的怪物沒有實際作用,所以在最后一個格點放置的一定是紅塔。藍綠塔的后效足,所以優先放在前面。而它們對于之后點的影響僅僅與他們的數量有關,而與他們的排列順序無關。(如對第5個格點,之前已經有兩個綠塔,兩個藍塔,無論它們的順序如何,在該點的造成的傷害都是2*y*(t+2z))
? ? ? ? 因此,我們記錄狀態dp[i][j]表示對于前i+j個格點有i個綠塔,j個藍塔在前i+j個格點造成的總的傷害的最大值
? ? ? ? 狀態轉移方程:dp[i][j]=max(dp[i-1][j]+(i-1)*y*(t+j*z)+dp[i][j-1]+i*y*(t+(j-1)*z))
/******************************************************* File Name: 1005.cpp* Author: kojimai* Creater Time:2014年08月12日 星期二 13時43分47秒 ******************************************************/#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<iostream> using namespace std; long long dp[1505][1505];//i-green j-blue int main() {int keng,Case=1;long long n,x,y,z,t;scanf("%d",&keng);while(keng--){cin>>n>>x>>y>>z>>t;long long ans=x*t*n;memset(dp,0,sizeof(dp));for(long long i=1;i<=n;i++){for(long long j=0;j<=i;j++){dp[j][i-j]=0;if(j)dp[j][i-j]=max(dp[j][i-j],dp[j-1][i-j]+y*(j-1)*(t+(i-j)*z));if(i-j)dp[j][i-j]=max(dp[j][i-j],dp[j][i-1-j]+y*(j)*(t+(i-j-1)*z));//cout<<j<<' '<<i-j<<' '<<dp[j][i-j]<<endl;ans=max(ans,dp[j][i-j]+(n-i)*(x*(t+z*(i-j))+y*j*(t+(i-j)*z)));//假設之后的全部都是紅塔}}printf("Case #%d: ",Case++);cout<<ans<<endl;}return 0; }總結
以上是生活随笔為你收集整理的hdu 4939 Stupid Tower Defense 2014多校七 DP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓rom制作,你知道的有多少
- 下一篇: 微博只显示来自android,新浪微博手