样例,以及第一个测试点测出来都是对的,但是结果显示全RE,求dalao回复orz
#include<bits/stdc++.h>
using namespace std;
const int N=1e7+10;
const int M=1e3+10;
char a[10],b[10];
int n,dt,cnt,v[N],w[N],f[M];
inline int tt(char a[]){
int lena=strlen(a),k,t1,t2;
for(k=0;k<lena;k++){
if(a[k]==':') break;
t1=t1*10+(a[k]-'0');
}
t1*=60;
for(int i=k+1;i<lena;i++){
t2=t2*10+(a[i]-'0');
}
return t1+t2;
}
int main()
{
scanf("%s %s %d",&a,&b,&n);
dt=tt(b)-tt(a);
for(int i=1;i<=n;i++){
int x,y,z;scanf("%d%d%d",&x,&y,&z);
if(z==0){
for(int j=0;j<=dt;j++){
if(j>=x) f[j]=max(f[j],f[j-x]+y);
}
}else{
int k=1;
while(z>=k){
v[++cnt]=x*k;
w[cnt]=y*k;
z-=k;k*=2;
}
if(z>0){
v[++cnt]=x*z;
w[cnt]=y*z;
}
}
for(int j=1;j<=cnt;j++){
for(int k=dt;k>=0;k--){
if(k>=v[j]) f[k]=max(f[k],f[k-v[j]]+w[j]);
}
}
memset(v,0,sizeof(v));
memset(w,0,sizeof(w));
cnt=0;
}
printf("%d\n",f[dt]);
return 0;
}