日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDU 4939 Stupid Tower Defense 简单DP

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDU 4939 Stupid Tower Defense 简单DP 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:

  地圖為長為n個單位長度的直線,每通過一個單位長度需要t秒。

  有3種塔,紅塔可以在當前格子每秒造成x點傷害,綠塔可以在之后格子造成y點傷害,藍塔可以使通過單位長度的時間增加z秒。

  讓你安排塔的排列是造成的傷害最大。

?

思路:

  最開始想到dp,狀態dp[i][r][g][b]表示:假設前i格放了r個紅塔、g個綠塔和b個藍塔,枚舉第i+1格放什么。

  因為長度最大為1500,所以如果這樣開狀態的話,需要1500^4的空間,這顯然是開不下的。

  后來想到,一種塔的數量可以表示成總數減去另外兩種塔的數量,這樣的話,就可以減掉一維,變成dp[i][g][b],還是會超空間。

  然后想到,紅塔只在當前格子有效,所以不用記錄有多少紅塔,只需要知道有多少綠塔和藍塔就好了,也不用記錄當前是第幾格。所以狀態變成了dp[g][b]。

  但是,這樣子時間復雜度仍然是n^3的,會超時。

  可以證明,如果存在紅塔,放在后面一定比放在前面更優。所以,只需要dp前面有g個綠塔和b個藍塔時候造成的最大傷害,然后在求解的時候計算出后面全是紅塔。 所以,時間復雜度也變成了n^2。這樣子就可以解了。

?

代碼:

  

1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath> 6 #include <algorithm> 7 #include <string> 8 #include <queue> 9 #include <stack> 10 #include <vector> 11 #include <map> 12 #include <set> 13 #include <functional> 14 #include <time.h> 15 16 using namespace std; 17 18 typedef __int64 ll; 19 20 const int INF = 1<<30; 21 const int MAXN = 1555; 22 23 ll dp[MAXN][MAXN]; //dp[i][j]: 前面i+j個塔中,有i個green,j個blue 24 ll n, x, y, z, t; 25 26 void solve() { 27 scanf("%I64d%I64d%I64d%I64d%I64d", &n, &x, &y, &z, &t); 28 29 memset(dp, 0, sizeof(dp)); 30 for (int i = 0; i < n; i++) 31 for (int j = 0; j+i < n; j++) { 32 dp[i+1][j] = max(dp[i+1][j], dp[i][j]+(i*y)*(t+j*z)); 33 dp[i][j+1] = max(dp[i][j+1], dp[i][j]+(i*y)*(t+j*z)); 34 } 35 36 ll ans = 0; 37 for (int i = 0; i <= n; i++) 38 for (int j = 0; i+j <= n; j++) 39 ans = max(ans, dp[i][j]+((n-i-j)*(x+i*y))*(t+z*j)); 40 41 printf("%I64d\n", ans); 42 } 43 44 int main() { 45 #ifdef Phantom01 46 freopen("HDU4939.txt", "r", stdin); 47 #endif //Phantom01 48 49 int T; 50 scanf("%d", &T); 51 for (int i = 1; i <= T; i++) { 52 printf("Case #%d: ", i); 53 solve(); 54 } 55 56 return 0; 57 } View Code

?

轉載于:https://www.cnblogs.com/Phantom01/p/3909427.html

總結

以上是生活随笔為你收集整理的HDU 4939 Stupid Tower Defense 简单DP的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。