zoukankan      html  css  js  c++  java
  • 【luogu1048】采药 [动规/01背包]

    采药

    题目luoguP1048 

        是一个裸的01背包

    f[v]表示不超过v的时间时最大价值

     1 /*
     2 id:gww
     3 language:
     4 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 
     5 */
     6 #include<bits/stdc++.h>
     7 using namespace std;
     8 const int N=100+10;
     9 int t,n,k[N],v[N],f[1000+10];
    10 int rd()
    11 {
    12     int x=0,w=0;char ch=0;
    13     while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    14     while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    15     return w?-x:x;
    16 }
    17 
    18 int main()
    19 {
    20     t=rd(),n=rd();
    21     for(int i=1;i<=n;i++)
    22     v[i]=rd(),k[i]=rd();
    23     for(int i=1;i<=n;i++)
    24     for(int j=t;j>=v[i];j--)
    25     f[j]=max(f[j-v[i]]+k[i],f[j]);
    26     printf("%d",f[t]);
    27     return 0;
    28 }
    一维数组

    f[i][j]表示前i个草药在时间j之前的最大价值

     1 /*
     2 id:gww
     3 language:
     4 啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 
     5 */
     6 #include<bits/stdc++.h>
     7 using namespace std;
     8 const int N=100+10;
     9 int t,n,k[N],v[N],f[N][1000+10];
    10 int rd()
    11 {
    12     int x=0,w=0;char ch=0;
    13     while(!isdigit(ch)) {w|=ch=='-';ch=getchar();}
    14     while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    15     return w?-x:x;
    16 }
    17 
    18 int main()
    19 {
    20     t=rd(),n=rd();
    21     for(int i=1;i<=n;i++)
    22     v[i]=rd(),k[i]=rd();
    23     for(int i=1;i<=n;i++)//枚举个数
    24     for(int j=t;j>=0;j--)
    25     {
    26         if(j>=v[i])//放得下 
    27         f[i][j]=max(f[i-1][j-v[i]]+k[i],f[i-1][j]);
    28         else//放不下 
    29         f[i][j]=f[i-1][j];
    30     }
    31     printf("%d",f[n][t]);
    32     return 0;
    33 }
    二维
  • 相关阅读:
    js中有趣的闭包(closure)
    js常见函数汇总
    js时间处理
    一些JavaScript的技巧、秘诀和最佳实践
    js创建对象的6种方式
    js数组常用方法汇总
    左右点击分页方法
    dedecms 添加自定义图字段,调用时出错
    js判断PC端与移动端跳转
    php验证码
  • 原文地址:https://www.cnblogs.com/lxyyyy/p/10324516.html
Copyright © 2011-2022 走看看