zoukankan      html  css  js  c++  java
  • NOIP2006 第二题(change)

     1 #include <stdio.h>
     2 #include <string.h>
     3 
     4 struct thing
     5 {
     6    int w[3],v[3];
     7    int size;
     8 };
     9 
    10 int main()
    11 {
    12     struct thing t[61];
    13     int i,tag,tag2,j,k,n,m,v,w,p;
    14     int s[2][32001];
    15     memset(s[0],0,sizeof(int)*32001);
    16     scanf("%d %d",&n,&m);
    17     tag=1;
    18     for(i=1;i<=m;i++)
    19     {
    20        scanf("%d %d %d",&w,&v,&p);
    21        if(p==0)
    22        {
    23           t[tag].size=1;
    24           t[tag].w[0]=w;t[tag].w[1]=0;t[tag].w[2]=0;
    25           t[tag].v[0]=v;t[tag].v[1]=0;t[tag].v[2]=0;
    26           tag++;
    27        }
    28        else
    29        {
    30           t[p].size++;
    31           t[p].w[t[p].size-1]=w;
    32           t[p].v[t[p].size-1]=v;
    33        }
    34     }
    35     for(i=1;i<tag;i++)
    36     {
    37        for(j=0;j<=n;j++)
    38        {
    39           tag2=0;
    40           if(j-t[i].w[0]>=0&&s[(i-1)%2][j-t[i].w[0]]+t[i].w[0]*t[i].v[0]>s[(i-1)%2][j])
    41           {
    42               s[i%2][j]=s[(i-1)%2][j-t[i].w[0]]+t[i].w[0]*t[i].v[0];tag2=1;
    43           }
    44           if(j-t[i].w[0]-t[i].w[1]>=0&&s[(i-1)%2][j-t[i].w[0]-t[i].w[1]]+t[i].w[0]*t[i].v[0]+t[i].w[1]*t[i].v[1]>s[(i-1)%2][j])
    45           {
    46               s[i%2][j]=s[(i-1)%2][j-t[i].w[0]-t[i].w[1]]+t[i].w[0]*t[i].v[0]+t[i].w[1]*t[i].v[1];tag2=1;
    47           }
    48           if(j-t[i].w[0]-t[i].w[2]>=0&&s[(i-1)%2][j-t[i].w[0]-t[i].w[2]]+t[i].w[0]*t[i].v[0]+t[i].w[2]*t[i].v[2]>s[(i-1)%2][j])
    49           {
    50               s[i%2][j]=s[(i-1)%2][j-t[i].w[0]-t[i].w[2]]+t[i].w[0]*t[i].v[0]+t[i].w[2]*t[i].v[2];tag2=1;
    51           }
    52           if(j-t[i].w[0]-t[i].w[1]-t[i].w[2]>=0&&s[(i-1)%2][j-t[i].w[0]-t[i].w[2]]+t[i].w[0]*t[i].v[0]+t[i].w[1]*t[i].v[1]+t[i].w[2]*t[i].v[2]>s[(i-1)%2][j])
    53           {
    54               s[i%2][j]=s[(i-1)%2][j-t[i].w[0]-t[i].w[1]-t[i].w[2]]+t[i].w[0]*t[i].v[0]+t[i].w[1]*t[i].v[1]+t[i].w[2]*t[i].v[2];tag2=1;
    55           }
    56           if(tag2==0)
    57               s[i%2][j]=s[(i-1)%2][j];
    58        }
    59     }
    60     printf("%d
    ",s[(tag-1)%2][n]);
    61     while(true);
    62     return 0;
    63 }

    <问题分析>

    典型的背包问题,用一个结构体将附件与主件捆绑,状态转移方程 if(j-w[i]>=0) s[i][j]=max(s[i-1][j],s[i-1][j-w[i]]+w[i]*v[i]) else s[i][j]=s[i-1][j]

  • 相关阅读:
    tomcat7的catalina.sh配置说明
    nginx防攻击的简单配置
    linux系统自签发免费ssl证书,为nginx生成自签名ssl证书
    mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost'
    /var/log/secure 文件清空
    Linux日志文件
    记一次网站被挂马处理
    Uedit32对文本进行回车换行
    安装mysql血泪史。
    mysql-8.0.19安装教程(Windows)
  • 原文地址:https://www.cnblogs.com/simplesslife/p/Herbs2.html
Copyright © 2011-2022 走看看