先把一整块拆成若干个二进制的单位
再进行01背包
//cyc
#pragma GCC optimize("Ofast")
#pragma GCC target("avx,avx2,fma")
#pragma GCC optimization ("unroll-loops")
#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define per(i,a,n) for(int i=n;i>=a;i--)
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define mst(a) memset(a,0,sizeof a)
using namespace std;
typedef pair<int,int> pii;
/*
____ ____ _____ .____________ _____
/_ /_ | / | || ____/_ | / | |
| || |/ | ||____ \ | |/ | |_
| || / ^ / \| / ^ /
|___||___\____ /______ /|___\____ |
|__| \/ |__|
*/
const int maxn=1e4+5;
const int maxp=1e6+5;
int n;
int t[maxn];
int c[maxn];
int p1[maxn];
//typedef pair<int,pair<int,int> > pik;
int nt1[maxp];
int nc1[maxp];
int np1[maxp];
int dp[maxp];
int tp;
int pw;
void init()
{
for(int i=1;i<=n;i++){
pw=1;
while(p1[i]){
tp++;
if(pw>p1[i]){
nt1[tp]=p1[i]*t[i];
nc1[tp]=p1[i]*c[i];
//np1[tp]=p[i];
break;
}
else{
nt1[tp]=pw*t[i];
nc1[tp]=pw*c[i];
// nc1[tp]=pw;
p1[i]-=pw;
}
pw*=2;
}
}
}
int main()
{
ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
string st1,st2;
cin>>st1>>st2;
int len1=st1.size()-1;
int len2=st2.size()-1;
int num1=0;
int num2=0;
int p;
for(int i=0;i<len1;i++){
if(st1[i]==':'){
p=i;
}
}
int cnt=1;
for(int i=p-1;i>=0;i--){
num1+=(st1[i]-'0')*cnt;
cnt*=10;
}
num1*=60;
cnt=1;
for(int i=len1;i>p;i--){
num1+=(st1[i]-'0')*cnt;
cnt*=10;
}
for(int i=0;i<len2;i++){
if(st2[i]==':'){
p=i;
}
}
cnt=1;
for(int i=p-1;i>=0;i--){
num2+=(st2[i]-'0')*cnt;
cnt*=10;
}
num2*=60;
cnt=1;
for(int i=len2;i>p;i--){
num2+=(st2[i]-'0')*cnt;
cnt*=10;
}
int dis=num2-num1;
// cout<<dis<<endl;
//----------------------------------------------------------------
cin>>n;
for(int i=1;i<=n;i++){
cin>>t[i]>>c[i]>>p1[i];
if(p1[i]==0)p1[i]=10000;
}
init();
int ans=0;
for(int i=1;i<=tp;i++){
for(int j=dis;j>=nt1[i];j--){
dp[j]=max(dp[j],dp[j-nt1[i]]+nc1[i]);
}
}
cout<<dp[dis]<<endl;
}