代码如下,知道要用二进制优化,但是我这样写会为什么最后会错两个点呢,想知道原因。
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10005;
string s1,s2;
int n;
int t[N],c[N],p[N];
int f[N][1005];
int main()
{
cin>>s1>>s2>>n;
int hour=s2[0]-'0'-(s1[0]-'0');
int minute=s2[3]-'0'+(s2[2]-'0')*10-(s1[3]-'0'+(s1[2]-'0')*10);
if(minute<0) hour--,minute=minute+60;
int tm=hour*60+minute;
//cout<<hour<<" "<<minute<<endl;
//cout<<tm<<endl;
for(int i=1;i<=n;i++) cin>>t[i]>>c[i]>>p[i];
for(int i=1;i<=n;i++)
for(int j=0;j<=tm;j++){
if(p[i]==0){
for(int k=0;k*t[i]<=j;k++)
f[i][j]=max(f[i][j],f[i-1][j-k*t[i]]+c[i]*k);
}
else{
for(int k=0;k*t[i]<=j && k<=p[i];k++)
f[i][j]=max(f[i][j],f[i-1][j-k*t[i]]+c[i]*k);
}
}
int res=0;
cout<<f[n][tm];
return 0;
}