JZOJ 3425. 能量获取
题目
分析
- 树形Dp
- 贪心都行
代码
1 #include<iostream> 2 using namespace std; 3 struct sb 4 { 5 int to,nx,w; 6 }g[10001]; 7 int cnt,list[10001]; 8 void add(int x,int y,int w) 9 { 10 g[++cnt].to=y; g[cnt].nx=list[x]; g[cnt].w=w; list[x]=cnt; 11 } 12 long long ans; 13 int f[1001][1001],t[1001]; 14 void dfs(int x,int y) 15 { 16 for (int i=list[x];i;i=g[i].nx) 17 dfs(g[i].to,min(y,g[i].w)); 18 if (!x) 19 { 20 for (int i=list[x];i;i=g[i].nx) 21 ans+=f[g[i].to][g[i].w]; 22 return; 23 } 24 for (int i=t[x];i<=y;i++) 25 f[x][i]=1; 26 for (int i=list[x];i;i=g[i].nx) 27 for (int j=y;j+1;j--) 28 for (int k=0;k<=min(j,g[i].w);k++) 29 f[x][j]=max(f[x][j],f[x][j-k]+f[g[i].to][k]); 30 } 31 int main () 32 { 33 int n; 34 cin>>n; 35 for (int i=1,x,y;i<=n;i++) 36 { 37 cin>>x>>t[i]>>y; 38 add(x,i,y); 39 } 40 dfs(0,21321937); 41 cout<<ans; 42 }
为何要逼自己长大,去闯不该闯的荒唐