80求调,谢谢啦
查看原帖
80求调,谢谢啦
848391
fantastic_dream楼主2023/4/30 11:11
#include<bits/stdc++.h>
using namespace std;
string a,b;
int n,v,f[1010]={0};
struct obj{
    int m,c,w;
}sz[10010];
void p01p(int c,int w){
    for(int i=v;i>=c;i--){
        f[i]=max(f[i],f[i-c]+w);
    }
    return;
}
void p02p(int c,int w){
    for(int i=c;i<=v;i++){
        f[i]=max(f[i],f[i-c]+w);
    }
}
void p03p(int c,int w,int num){
    if(num*c>=v){
        p02p(c,w);                              
    }
    else{
        int t=1,num1=num;
        while(t<num1){
            p01p(t*c,t*w);
            num1-=t;
            t*=2;
        }
        p01p(num1*c,num1*w);
    }
}
int main(){
    int x1,a1,x2,a2;
    scanf("%d:%d %d:%d",&x1,&a1,&x2,&a2);
    if(a1>a2){
        a2+=60;
        x2--;
    }
    cin>>n;
    v=(x2-x1)*60+a2-a1;
    int e,d,g;
    for(int i=1;i<=n;i++){
        cin>>e>>d>>g;
        if(g==1)    p01p(e,d);
        if(g==0)    p02p(e,d);
        else    p03p(e,d,g);
    }
    cout<<f[v];
}
2023/4/30 11:11
加载中...