zoukankan      html  css  js  c++  java
  • luogu1064金明的预算方案

    题面太长

    手残把n打成m

     1 void read()
     2 {
     3     red(n);
     4     red(m);
     5     memset(v,0x3f,sizeof(v));
     6     for(int i=1;i<=m;++i)
     7     {
     8         red(x);
     9         red(p);
    10         red(q);
    11         if(q)
    12         {
    13             v[q][i]=x;
    14             w[q][i]=x*p;
    15         }        
    16         else
    17         {
    18             v[i][0]=x;
    19             w[i][0]=x*p;
    20         }    
    21     }    
    22 }
    23 void work()
    24 {
    25     for(int i=1;i<=m;++i)
    26         for(int j=n;j>=v[i][0];--j)
    27         {
    28             if(f[j-v[i][0]]+w[i][0]>f[j])
    29             {
    30                 f[j]=f[j-v[i][0]]+w[i][0];
    31                 for(int k=1;k<=m;++k)
    32                     if(j+v[i][k]<=m)
    33                         f[j+v[i][k]]=max(f[j+v[i][k]],f[j]+w[i][k]);
    34             }
    35         }
    36     for(int i=1;i<=n;++i)
    37         ans=max(ans,f[i]);
    38     printf("%d",ans);
    39 }
    很瓜的20分
     1 void read()
     2 {
     3     red(n);
     4     red(m);
     5     memset(v,0x3f,sizeof(v));
     6     for(int i=1;i<=m;++i)
     7     {
     8         red(x);
     9         red(p);
    10         red(q);
    11         if(q)
    12         {
    13             v[q][i]=x;
    14             w[q][i]=x*p;
    15         }        
    16         else
    17         {
    18             v[i][0]=x;
    19             w[i][0]=x*p;
    20         }    
    21     }    
    22 }
    23 void work()
    24 {
    25     for(int i=1;i<=m;++i)
    26         for(int j=n;j>=v[i][0];--j)
    27         {
    28             if(!v[i][0])
    29                 break;
    30             if(f[j-v[i][0]]+w[i][0]>f[j])
    31             {
    32                 f[j]=f[j-v[i][0]]+w[i][0];
    33                 for(int k=1;k<=m;++k)
    34                     if(j+v[i][k]<=n)
    35                         f[j+v[i][k]]=max(f[j+v[i][k]],f[j]+w[i][k]);
    36             }
    37         }
    38     for(int i=0;i<=n;++i)
    39         ans=max(ans,f[i]);
    40     printf("%d",ans);
    41 }
    更瓜的40分(改成了n)

    这个时候才注意到附件是0-2个

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int maxn=1e6+5;
     4 const int INF=1e9+7;
     5 int n,m,x,p,q,v[65][65],w[65][65],f[maxn],ans,t[65];
     6 template <class t>void red(t &x)
     7 {
     8     x=0;
     9     int w=1;
    10     char ch=getchar();
    11     while(ch<'0'||ch>'9')
    12     {
    13         if(ch=='-')
    14             w=-1;
    15         ch=getchar();
    16     }
    17     while(ch>='0'&&ch<='9')
    18     {
    19         x=(x<<3)+(x<<1)+ch-'0';
    20         ch=getchar();
    21     }
    22     x*=w;
    23 }
    24 void input()
    25 {
    26     freopen("input.txt","r",stdin);
    27 }
    28 void read()
    29 {
    30     red(n);
    31     red(m);
    32     memset(v,0x3f,sizeof(v));
    33     for(int i=1;i<=m;++i)
    34     {
    35         red(x);
    36         red(p);
    37         red(q);
    38         if(q)
    39         {
    40             v[q][++t[q]]=x;
    41             w[q][t[q]]=x*p;
    42         }        
    43         else
    44         {
    45             v[i][0]=x;
    46             w[i][0]=x*p;
    47         }    
    48     }    
    49 }
    50 void work()
    51 {
    52     for(int i=1;i<=m;++i)
    53         for(int j=n;j>=v[i][0];--j)
    54         {
    55             if(!v[i][0])
    56                 break;
    57             if(j>=v[i][0])
    58                 f[j]=max(f[j],f[j-v[i][0]]+w[i][0]);
    59             if(j>=v[i][1]+v[i][0])
    60                 f[j]=max(f[j],f[j-v[i][1]-v[i][0]]+w[i][1]+w[i][0]);
    61             if(j>=v[i][2]+v[i][0])
    62                 f[j]=max(f[j],f[j-v[i][2]-v[i][0]]+w[i][2]+w[i][0]);
    63             if(j>=v[i][1]+v[i][0]+v[i][2])
    64                 f[j]=max(f[j],f[j-v[i][1]-v[i][0]-v[i][2]]+w[i][2]+w[i][1]+w[i][0]);
    65         }
    66     for(int i=0;i<=n;++i)
    67         ans=max(ans,f[i]);
    68     printf("%d",ans);
    69 }
    70 int main()
    71 {
    72     //input();
    73     read();
    74     work();
    75     return 0;
    76 }
    瓜到哭泣

  • 相关阅读:
    实验11——指针的基础应用
    C语言程序设计第10堂作业
    实验九——基本数据类型存储及应用总结
    C语言程序设计第8堂作业
    实验七——函数定义及调用总结
    实验六——循环结构程序练习总结
    实验五——循环结构学习总结
    实验四——多分支结构及本章总结
    9.29第三次作业
    zuoyeQAQ
  • 原文地址:https://www.cnblogs.com/Achensy/p/10775660.html
Copyright © 2011-2022 走看看