当可以看的次数乘以时间大于总时间时完全背包问题用
#include<iostream>
#include<cstdio>
using namespace std;
int t[10005],c[10005],p[10005],dp[10005];
int main()
{
int t1,t2,m1,m2,i,j,n,tt,k;
scanf("%d:%d %d:%d %d",&t1,&m1,&t2,&m2,&n);
tt=(t2-t1)*60+m2-m1;
for(i=0;i<n;i++)
cin>>t[i]>>c[i]>>p[i];
for(i=0;i<n;i++)
{
if(p[i]==0||p[i]*t[i]>=tt)//当可以看的次数乘以时间大于总时间时完全背包问题用
{
for(j=t[i];j<=tt;j++)
dp[j]=max(dp[j],dp[j-t[i]]+c[i]);
}
else if(p[i]==1)
{
for(j=tt;j>=t[i];j--)
dp[j]=max(dp[j],dp[j-t[i]]+c[i]);
}
else
{
for(k=0;k<p[i];k++)
for(j=tt;j>=t[i];j--)
dp[j]=max(dp[j],dp[j-t[i]]+c[i]);
}
}
cout<<dp[tt]<<endl;
return 0;
}