社区讨论

0pts求条

P2014[CTSC1997] 选课参与者 3已保存回复 4

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
4 条
当前快照
1 份
快照标识符
@mhj3dkpq
此快照首次捕获于
2025/11/03 20:03
4 个月前
此快照最后确认于
2025/11/03 20:03
4 个月前
查看原帖
CPP
//  Gavinzhou's code
#include<bits/stdc++.h>
using namespace std;
//#define nottest
#define in freopen("xx.in","r",stdin)
#define out freopen("xx.out","w",stdout)
#define int long long
#define Abs(x) ((x)<0?-(x):(x))
#define Max(a, b) ((a)>(b)?(a):(b))
#define Min(a, b) ((a)<(b)?(a):(b))
#define fir first
#define sec second
using intint=pair<int,int>;
using str=string;
const int N=3e5;
//变量函数区
int n,m;
int a[306];
vector<int>g[406];
int f[305][305];
int size[305];
void dfs(int x){
    size[x]=1;
    for(int i:g[x]){
        dfs(i);
        size[x]+=size[i];
    }
}
void dfs1(int x){
    for(int i:g[x]){
        dfs1(i);
        for(int j=min(m,size[x]);j>=2;j--){
            for(int k=1;k<j;k++){
                f[x][j]=max(f[x][j-k]+f[i][k],f[x][j]);
            }
            //f[x][j]+=a[i];
        }
    }
    f[x][1]=a[x];
}
//结束
signed main(){
#ifdef nottest
    in;
    out;
#endif
    //主函数区
    cin>>n>>m;
    m++;
    for(int i=1;i<=n;i++){
        int s,k;
        cin>>k>>s;
        a[i]=s;
        g[k].push_back(i);
    }
    //memset(f,-0x3f,sizeof(f));57行
    f[0][0]=0;
    dfs(0);
    dfs1(0);
    //cout<<size[0]<<endl;
    cout<<f[0][m];
    //结束
    return 0;
}
把57行取消注释就输出一个极小值,怎么办

回复

4 条回复,欢迎继续交流。

正在加载回复...