zoukankan      html  css  js  c++  java
  • NOIP提高组2006-金明的预算方案

    链接

    分析:依赖型0-1背包问题,对于一个主件,可以挂0个,1个,2个附件,所以最终为4种状态情况下的最大值。

     1 #include "iostream"
     2 #include "cstdio"
     3 #include "cstring"
     4 #include "string"
     5 using namespace std;
     6 const int maxn=60+10;
     7 const int maxm=32000+10;
     8 int N,m;
     9 int dp[maxm];
    10 int v1[maxn],p1[maxn],v2[maxn],p2[maxn];
    11 int v[maxn],p[maxn];
    12 int main()
    13 {
    14     cin>>N>>m;
    15     for(int i=0;i<62;i++){
    16         v1[i]=0,p1[i]=0,v2[i]=0,p2[i]=0,v[i]=0,p[i]=0;
    17     }
    18     for(int i=1;i<=m;i++){
    19         int a,b,q;
    20         cin>>a>>b>>q;
    21         if(q!=0){
    22             if(v1[q]==0){
    23                 v1[q]=a;
    24                 p1[q]=b;
    25             }else{
    26                 v2[q]=a;
    27                 p2[q]=b;
    28             }
    29         }else{
    30             v[i]=a;
    31             p[i]=b;
    32         }
    33     }
    34     int mx=0;
    35     for(int i=1;i<=m;i++){
    36         for(int j=N;j>=v[i];j--){
    37             dp[j]=max(dp[j],dp[j-v[i]]+v[i]*p[i]);
    38             if(j>=(v[i]+v1[i]))
    39                 dp[j]=max(dp[j],dp[j-v[i]-v1[i]]+v[i]*p[i]+v1[i]*p1[i]);
    40             if(j>=(v[i]+v2[i]))
    41                 dp[j]=max(dp[j],dp[j-v[i]-v2[i]]+v[i]*p[i]+v2[i]*p2[i]);
    42             if(j>=(v[i]+v1[i]+v2[i]))
    43                 dp[j]=max(dp[j],dp[j-v[i]-v1[i]-v2[i]]+v[i]*p[i]+v1[i]*p1[i]+v2[i]*p2[i]);
    44             mx=max(mx,dp[j]);
    45         }
    46     }
    47     cout<<mx<<endl;
    48 }
    View Code
  • 相关阅读:
    学生信息录入系统
    作业11(增删改查listview)
    作业10(qq增删改查)
    作业9
    作业8
    作业7
    右键打开Windows Terminal
    axure 动态面板中滚动条
    TortoiseSVN服务端的配置与使用
    hfs使用小技巧
  • 原文地址:https://www.cnblogs.com/wolf940509/p/7159879.html
Copyright © 2011-2022 走看看