求调,10pts,玄关
查看原帖
求调,10pts,玄关
769006
crzcqh楼主2024/8/6 10:52

rt,我以凡人之躯瞪不出来错误

#include<bits/stdc++.h>
#define ll long long
#define M 3005
using namespace std;
ll n,m,k,a,c;
ll dp[M][M];
struct line{
	ll v,w;
};
vector<line> edge[M];
int dfs(ll u){
	if(u>n-m) 
		return 1;
	ll sum=0,tmp;
	for(auto k : edge[u]){
		tmp=dfs(k.v);
		sum+=tmp;
		for(ll j=sum;j>0;j--)
			for(ll i=1;i<=tmp;i++)
				if(j-i>=0) 
					dp[u][j]=max(dp[u][j],dp[u][j-i]+dp[k.v][i]-k.w);
	}
	return sum;
}
int main(){
	cin>>n>>m;
	for(ll i=1;i<=n-m;i++){
		cin>>k;
		for(ll j=1;j<=k;j++){
			cin>>a>>c;
			edge[i].push_back({a,c});
		}
	}
	for(ll i=1;i<=m;i++)
		cin>>dp[i+n-m][1];
	dfs(1);
	for(ll i=edge[1].size();i>=0;i--){
		if(dp[1][i]>=0){
			cout<<i;
			break;
		}
	}
	return 0;
}

2024/8/6 10:52
加载中...