2 条题解
-
0
#include<bits/stdc++.h> using namespace std; int main() { int n,i,j,a[105],x; bool b[105][105]={}; char ch; cin>>n; for(i=1;i<=n;++i) { cin>>a[i]; ch=getchar(); while(ch==' '&&ch!='\\n') { cin>>x; b[i][x]=1; ch=getchar(); } } for(i=n-1;i>=1;--i) { int maxn=0; for(j=i+1;j<=n;++j) if(b[i][j]) maxn=max(maxn,a[j]); a[i]+=maxn; } int maxn=0; for(i=1;i<=n;++i) maxn=max(maxn,a[i]); cout<<maxn; return 0; }
-
0
dfs会爆炸(确信),所以采用
#include<bits/stdc++.h> using namespace std; int n,i,tree[1005][1005],a[1005],len[1005],ma,dp[1005],j; char b; void write(int x) { if(x<0){ putchar('-'); write(-x); return; } if(x>=10)write(x/10); putchar(x%10+'0'); } int main() { cin>>n; for(i=1;i<=n;i++) { cin>>a[i]; scanf("%c",&b);//用字符判断是否有儿子 while(b==' ') { cin>>tree[i][++len[i]];//输入 scanf("%c",&b); } } ma=dp[n]=a[n]; for(i=n-1;i>=1;i--)//从尾往前 { dp[i]=a[i];//初始化 for(j=1;j<=len[i];j++)dp[i]=max(dp[i],a[i]+dp[tree[i][j]]);//加上它父亲的 ma=max(ma,dp[i]); } write(ma); return 0; }
- 1
信息
- ID
- 24
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- (无)
- 递交数
- 128
- 已通过
- 47
- 上传者