zoukankan      html  css  js  c++  java
  • P1833 樱花

    题目:

    Snipaste_2020-06-06_00-02-15.png

    正文:

    • 题目为多重背包,需要注意的点就是如果次数为0的话就把它变成一个极大的数,还有就是时间的计算。
    • 也没什么好说的,直接上代码吧。

    Code:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #include <queue>
    #include <stack>
    #include <map>
    #include <set>
    #include <list>
    using namespace std;
    #define R read()
    #define GC getchar()
    #define ll long long
    #define ull unsigned long long
    #define INF 0x7fffffff
    #define LLINF 0x7fffffffffffffff
    ll read(){
        ll s=0,f=1;
        char c=GC;
        while(c<'0'||c>'9'){if(c=='-')f=-f;c=GC;}
        while(c>='0'&&c<='9'){s=s*10+c-'0';c=GC;}
        return s*f;
    }
    int n,m,t;
    int a,b,c;
    int v[200010],w[200010];
    int f[40010];
    int x1,y11,x2,y2;//定义为y11是因为y1是和一个自带的变量重名。
    int main(){
        scanf("%d:%d %d:%d %d",&x1,&y11,&x2,&y2,&n);//输入
        m=(x2*60+y2)-(x1*60+y11);//计算时间,以分钟为单位时间
        for(int i=1;i<=n;++i){
            scanf("%d %d %d",&b,&a,&c);
            if(c==0){//c是0,赋值成一个很大的数
                c=1000000;
            }
            for(int j=1;j<=c;j<<=1){//分开
                v[++t]=a*j;
                w[t]=b*j;
                c-=j;
            }
            if(c){//有剩余的直接按*c来就好了
                v[++t]=a*c;
                w[t]=b*c;
            }
        }
        for(int i=1;i<=t;++i){//平平无奇的01背包
            for(int j=m;j>=w[i];--j){
                f[j]=max(f[j],f[j-w[i]]+v[i]);
            }
        }
        printf("%d",f[m]);//输出
        return 0;
    }
    
  • 相关阅读:
    001-进程与线程
    mysql优化(11)
    mysql优化(十)
    mysql优化(九)
    mysql优化(八)
    mysql优化(七)
    mysql优化(六)
    mysql优化(五)
    mysql优化(四)
    mysql优化(二)
  • 原文地址:https://www.cnblogs.com/FUXyao/p/13053070.html
Copyright © 2011-2022 走看看