技能樹
玩過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年 作業系統知識 了解 看過基本導論書籍 計算機網...