zoukankan      html  css  js  c++  java
  • P1270 “访问”美术馆

    两种dp方式 第一种dp[i][j]表示到第i个节点花费j的时间能偷到的最多的画

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    int s,a[210],d[210],f[210][6010];
    
    void make_tree(int root){
    	int x,y;
    	scanf("%d%d",&x,&y);
    	d[root]=2*x;
    	a[root]=y;
    	if(y==0){
    		make_tree(root*2);
    		make_tree(root*2+1);
    	}
    }
    
    void dfs(int root){
    	if(a[root]){
    		for(int i=0;i/5<=a[root] && d[root]+i<=s;i++)f[root][d[root]+i]=i/5;
    		return;
    	}
    	dfs(root*2);
    	dfs(root*2+1);
    	for(int i=d[root];i<=s;i++){
    		for(int j=0;j+d[root]<=i;j++)f[root][i]=max(f[root][i],f[root*2][j]+f[root*2+1][i-d[root]-j]);
    	}
    }
    
    int main(){
    	scanf("%d",&s); s--;
    	make_tree(1);
    	dfs(1);
    	printf("%d
    ",f[1][s]);
    	return 0;
    }
    

      第二种dp[i][j]表示到i节点偷了j幅画所需要的时间

      

  • 相关阅读:
    Document
    Document
    Document
    Document
    Document
    Document
    Document
    Document
    8.React 组件封装
    window.location / history / 以及相关事件
  • 原文地址:https://www.cnblogs.com/codetogether/p/13329987.html
Copyright © 2011-2022 走看看