技能樹 題解

2021-10-09 06:46:49 字數 1999 閱讀 6322

技能樹

玩過d ia

bl

odiablo

diablo

的人對技能樹一定是很熟悉的。一顆技能樹的每個結點都是一項技能,要學會這項技能則需要耗費一定的技能點數。只有學會了某一項技能以後,才能繼續學習它的後繼技能。每項技能又有著不同的級別,級別越高效果越好,而技能的公升級也是需要 耗費技能點數的。

有個玩家積攢了一定的技能點數,他想盡可能地利用這些技能點數來達到最好的效果。因此他給所有的級別都打上了分,他認為效果越好的分數也越高。現在他要你幫忙尋找乙個分配技能點數的方案,使得分數總和最高。

第一行是乙個整數n

nn(1<=n

nn<=20),表示所有不同技能的總數。接下來依次給出n

nn個不同技能的詳細情況。每個技能描述包括5行,第一行是該技能的名稱,第2行是該技能在技能樹中父技能的名稱,為空則表示該技能不需要任何的先修技能便能學習。第3行是乙個整數l

ll(1<=l

ll<=20),表示這項技能所能擁有的最高端別。第4行共有l

ll個整數,其中第i

ii個整數表示從地i-1級公升到第i

ii級所需要的技能點數(0級表示沒有學習過)。第5行包括l

ll個整數,其中第i

ii個整數表示從第i

ii-1級公升級到第i級的效果評分,分數不超過20。在技能描述之後,共有兩行,第1行是乙個整數p

pp,表示目前所擁有的技能點數。接下來1行是n

nn個整數,依次表示角色當前習得的技能級別,0表示還未學習。這裡不會出現非法情況。

s,表示最佳分配方案所得的分數總和。

input

3freezing arrow

ice arrow

33 3 3

15 4 6

ice arrow

cold arrow

24 3

10 17

cold arrow

33 3 2

15 5 2

100 0 1

output

42f[i][j]意思為學到第i個技能花了j個技能點數得到的價值

分兩種情況思考

第一種

原先有等級,不公升級

if

(d[h[i].to]

)

第二種

公升級它

for

(int j=d[h[i].to]+1;j<=l[h[i].to]

;j++)

#include

#include

#include

#include

using namespace std;

struct hhxh[500200]

;int n,m,a[1020],t,tt,l[1020],l1[1020]

[1020],l2[1020]

[1020],head[1020]

;int f[1020]

[1020],d[1020]

;string s,su[1020]

; int find(string x)

void add(int x,int y) //連線

void dfs(int x,int r)

int g1=0,g2=0;

for(int j=d[h[i].to]+1;j<=l[h[i].to]

;j++) //公升級

}}int main(

) scanf(

"%d",&m)

;for

(int i=1;i<=n;i++)

scanf(

"%d",&d[a[i]])

; dfs(0,m)

; printf(

"%d",f[0]

[m])

;}

技能樹(樹形dp)

description 玩過diablo的人對技能樹一定是很熟悉的。一顆技能樹的每個結點都是一項技能,要學會這項技能則需要耗費一定的技能點數。只有學會了某一項技能以後,才能繼續學習它的後繼技能。每項技能又有著不同的級別,級別越高效果越好,而技能的公升級也是需要 耗費技能點數的。有個玩家積攢了一定的技...

產品經理技能樹

最近面試被問到 你認為初級 中級 高階產品經理之間的能力該如何劃分,而自己又處於哪個階段?未來三年的個人成長目標是什麼 現在與目標的核心差距是什麼,計畫如何實現?確實是乙個很好的問題,不僅讓你自己 還讓大家明白彼此的定位與能力,未來想朝哪方面努力學習。這是乙個團隊互相配合工作的重要前提 大家知己知彼...

我的技能樹

這幾年技能點得太雜 太亂 導致難點的副本跟本打不了 c c 基本會用 2年 windows桌面開發 基本會用 2年 android應用 基本會用 0.5年 linux程式開發 正在學習 2個月 php 正在學習 1個月 python 基本會用 0.5年 作業系統知識 了解 看過基本導論書籍 計算機網...