0pts求助
查看原帖
0pts求助
360025
zzyaba楼主2024/11/20 16:10

给组hack也行啊

#include<bits/stdc++.h>
using namespace std;
int k,n,s[2502],p[2502],r[2502],sz[2502];
double mid,l,rt=10000,dp[2502][2502];
vector<int>g[2502];
int main(){
    cin>>k>>n;
    k++;
    for(int i=1;i<=n;i++){
        cin>>s[i]>>p[i]>>r[i];
        g[r[i]].push_back(i);
    }
    while(rt-l>=1e-4){
        mid=(l+rt)/2;
        for(int i=1;i<=n;i++){
            dp[i][1]=p[i]-s[i]*mid;
        }
        for(int i=n;i>=0;i--){
            sz[i]=1;
            for(auto&j:g[i]){
                sz[i]+=sz[j];
                for(int l=sz[i];l>=2;l--){
                    dp[i][l]=-1e9;
                    for(int o=1;o<=min(sz[j],l-1);o++){
                        dp[i][l]=max(dp[i][l],dp[i][l-o]+dp[j][o]);
                    }
                }
            }
        }
        if(dp[0][k]>=0){
            l=mid;
        }else{
            rt=mid;
        }
    }
    printf("%.3lf",rt);
}
2024/11/20 16:10
加载中...