2 条题解

  • 0
    @ 2025-10-8 17:00:52

    by hansang:

    #include<bits/stdc++.h>
    using namespace std;
    const int N=510;
    int f[N][N][2], n, a[N];
    vector<int> G[N]; 
    void dfs(int x){
    	f[x][0][0]=0;
    	f[x][0][1]=a[x];
    	for(int y: G[x]){
    		dfs(y);
    		for(int i=n; i>=0; i--){
    			for(int j=i; j>=0; j--){
    				f[x][i][0]=max(f[x][i][0], f[x][j][0]+max(f[y][i-j][1], f[y][i-j][0]));
    				if(i-j>=1) f[x][i][1]=max(f[x][i][1], f[x][j][1]+f[y][i-j-1][1]);
    				f[x][i][1]=max(f[x][i][1], f[x][j][1]+f[y][i-j][0]);
    			}
    		}
    	}
    }
    void work(){
    	int m; scanf("%d%d", &n, &m);
    	for(int i=1; i<=n; i++){
    		int x=i, y; scanf("%d%d", &a[i], &y);
    		G[y].push_back(x);
    	} 
    	memset(f, -0x3f, sizeof(f));
    	a[0]=0; dfs(0);
    	for(int i=n; i>=0; i--){ 
    		if(f[0][i][0]<m) continue;
    		printf("%d\n", i);
    		return ;
    	}
    	printf("-1\n");
    }
    int main(){
    	work();
    	return 0;
    }
    
    • 0
      @ 2025-10-8 17:00:41

      by hansang:

      #include<bits/stdc++.h>
      using namespace std;
      const int N=510;
      int f[N][N][2], n, a[N];
      vector<int> G[N]; 
      void dfs(int x){
      	f[x][0][0]=0;
      	f[x][0][1]=a[x];
      	for(int y: G[x]){
      		dfs(y);
      		for(int i=n; i>=0; i--){
      			for(int j=i; j>=0; j--){
      				f[x][i][0]=max(f[x][i][0], f[x][j][0]+max(f[y][i-j][1], f[y][i-j][0]));
      				if(i-j>=1) f[x][i][1]=max(f[x][i][1], f[x][j][1]+f[y][i-j-1][1]);
      				f[x][i][1]=max(f[x][i][1], f[x][j][1]+f[y][i-j][0]);
      			}
      		}
      	}
      }
      void work(){
      	int m; scanf("%d%d", &n, &m);
      	for(int i=1; i<=n; i++){
      		int x=i, y; scanf("%d%d", &a[i], &y);
      		G[y].push_back(x);
      	} 
      	memset(f, -0x3f, sizeof(f));
      	a[0]=0; dfs(0);
      	for(int i=n; i>=0; i--){ 
      		if(f[0][i][0]<m) continue;
      		printf("%d\n", i);
      		return ;
      	}
      	printf("-1\n");
      }
      int main(){
      	work();
      	return 0;
      }
      • 1

      USACO(126)动态规划(树形DP)4:产奶比赛P6079 [USACO06MAR] Milk Team Select G

      信息

      ID
      2317
      时间
      1000ms
      内存
      128MiB
      难度
      9
      标签
      递交数
      20
      已通过
      3
      上传者