zoukankan      html  css  js  c++  java
  • [NOIP2006] 金明的预算方案

    题意:

    传送门

    题解:

    由于最多只有两件物品,所以转移主件的时候暴力转移附件即可

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #define ll long long
    #define N 40000
    using namespace std;
    
    int n,m,dp[N],w[100],v[100],son[100][10];
    bool bj[100];
    
    int gi() {
      int x=0,o=1; char ch=getchar();
      while(ch!='-' && (ch<'0' || ch>'9')) ch=getchar();
      if(ch=='-') o=-1,ch=getchar();
      while(ch>='0' && ch<='9') x=x*10+ch-'0',ch=getchar();
      return o*x;
    }
    
    int main() {
      m=gi(),n=gi();
      for(int i=1; i<=n; i++) {
        w[i]=gi(),v[i]=w[i]*gi();
        int x=gi();
        if(x) son[x][++son[x][0]]=i,bj[i]=1;    
      }
      for(int i=1; i<=n; i++) {
        if(bj[i]) continue;
        for(int j=m; j>=0; j--) {
          if(son[i][0]>=0) {
            if(j-w[i]>=0) 
              dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
          }
          if(son[i][0]>=1) {
            if(j-w[i]-w[son[i][1]]>=0)
              dp[j]=max(dp[j],dp[j-w[i]-w[son[i][1]]]+v[i]+v[son[i][1]]);
            if(j-w[i]-w[son[i][2]]>=0)
              dp[j]=max(dp[j],dp[j-w[i]-w[son[i][2]]]+v[i]+v[son[i][2]]);
          }
          if(son[i][0]>=2) {
            if(j-w[i]-w[son[i][1]]-w[son[i][2]]>=0)
              dp[j]=max(dp[j],dp[j-w[i]-w[son[i][1]]-w[son[i][2]]]+v[i]+v[son[i][1]]+v[son[i][2]]);
          }
        }
      }
      printf("%d
    ", dp[m]);
      return 0;
    }
    
  • 相关阅读:
    HTTP && 缓存
    querySelector $() getElementBy区别
    Canvas 雾玻璃
    Github page
    Browserify
    关于布局和结构
    how to install flash
    kali update can’t found win7 loader
    arp spoofing
    How To Set Up Port Forwarding in Linux
  • 原文地址:https://www.cnblogs.com/HLXZZ/p/7670100.html
Copyright © 2011-2022 走看看