acgo题库
  • 首页
  • 题库
  • 学习
  • 天梯
  • 备赛

    竞赛

    • CSP-J/S
    • 蓝桥杯

    考级

    • GESP
    • CPA
    • 电子学会考级
  • 竞赛
  • 讨论
  • 团队
  • 商城
登录
注册
题目详情提交记录(0)
  • 题解

    这题可以使用拓扑排序的方法解决。 首先把没有直接先修课的课程加入优先队列,然后每次挑最大值广搜即可。 时间复杂度:O(Mlog⁡N)O(M\log N)O(MlogN)。

    userId_undefined
    cjdst
    尊贵铂金CSP-S一等奖代码纠察员出题人
    37阅读
    0回复
    0点赞
  • 题解

    #include <bits/stdc++.h> using namespace std; const int N=310,M=2*N; int n, m; int h[N],e[M],w[M],ne[M],idx; int f[N][N]; void add(int a,int b){ e[idx]=b; ne[idx]=h[a]; h[a]=idx++; } void dfs(int u){ for(int j=1;j<=m;j++){ f[u][j]=w[u]; } for(int i=h[u];i!=-1;i=ne[i]){ int t=e[i]; dfs(t); for(int j=m;j>=1;j--){ for(int k=0;k<j;k++){ f[u][j]=max(f[u][j],f[u][j-k]+f[t][k]); } } } } int main(){ cin>>n>>m; memset(h,-1,sizeof h); for(int i=1;i<=n;i++){ int a,b,c; cin>>a>>c; add(a,i); w[i]=c; } m++; dfs(0); cout<<f[0][m]; }

    userId_undefined
    wyfdd
    时间刺客空间掌握者时空双修者
    0阅读
    0回复
    0点赞
暂无数据

提交答案之后,这里将显示提交结果~

首页