#include<bits/stdc++.h>
#define endl '\n'
#define debug cout<<"debug"
using namespace std;
struct time{
int mm,dd;
}Ts,Te;
int t[10001],c[10001],p[10001],dp[1001],nw[8],nv[8];
int main(){
int n,W;
scanf("%d:%d %d:%d %d",&Ts.mm,&Ts.dd,&Te.mm,&Te.dd,&n);
if(Ts.dd>Te.dd)Te.dd+=60,Te.mm--;
W=(Te.mm-Ts.mm)*60+Te.dd-Ts.dd;
for(int i=1;i<=n;i++)scanf("%d%d%d",&t[i],&c[i],&p[i]);
for(int i=1;i<=n;i++)
if(p[i]==1){
for(int j=W;j>=t[i];j--)
dp[j]=max(dp[j],dp[j-t[i]]+c[i]);
}
else if(p[i]==0){
for(int j=t[i];j<=W;j++)
dp[j]=max(dp[j],dp[j-t[i]]+c[i]);
}else{
int num=1,noi=0;
//不要介意变量名,noi是Number of items的缩写!
while(p[i]){
nw[++noi]=t[i]*num;
nv[noi]=c[i]*num;
p[i]-=num;
num<<=1;
if(p[i]<num){
nw[++noi]=t[i]*p[i];
nv[noi]=c[i]*p[i];
break;
}
}
for(int j=1;j<=noi;j++)
for(int k=W;k>=nw[j];k--)
dp[k]=max(dp[k],dp[k-nw[j]]+nv[j]);
}
printf("%d",dp[n]);
return 0;
}
被证实求时间部分没有问题。至少是样例没有