记录详情 link
代码:
#include<bits/stdc++.h>
using namespace std;
long long f[2000010];
struct full{
long long val,wei;
}b[1000010];
struct fulll{
long long val,wei;
}a[1000010];
int main(){
long long n,t,h1,h2,ti1,ti2,t1=0,t2=0;
char ch;
cin>>h1>>ch>>ti1>>h2>>ch>>ti2>>n;
t=(h2-h1)*60+ti2-ti1;
for(int i=1;i<=n;i++){
long long x,y,z;
cin>>x>>y>>z;
if(!z){
b[++t1].val=y;
b[t1].wei=x;
}
else{
long long now=1;
while(now<=z){
a[++t2].wei=now*x;
a[t2].val=now*y;
z-=now;
now*=2;
}
if(!z){
a[++t2].wei=z*x;
a[t2].val=z*y;
}
}
}
for(int i=1;i<=t1;i++){
for(int j=b[i].wei;j<=t;j++){
f[j]=max(f[j-b[i].wei]+b[i].val,f[j]);
}
}
for(int i=1;i<=t2;i++){
for(int j=t;j>=a[i].wei;j--){
f[j]=max(f[j],f[j-a[i].wei]+a[i].val);
}
}
cout<<f[t]<<endl;
return 0;
}
题解区没有和我代码相似的OvO
求大佬解答