为什么做了二进制优化之后过不了了,纯的多重背包可以
优化后的部分哪里出了问题,请dalao指导
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,de,f[1005],c[10005],p[10005],t[10005];
ll tin(){
ll sh=0,sm=0,eh=0,em=0,res=0;
scanf("%lld:%lld %lld:%lld",&sh,&sm,&eh,&em);
res=(eh-sh)*60+em-sm;
return res;
}
int main(){
de=tin();
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld %lld %lld",&t[i],&c[i],&p[i]);
}
for(ll i=1;i<=n;i++){
if(p[i]==0){
for(ll j=t[i];j<=de;j++){
f[j]=max(f[j],f[j-t[i]]+c[i]);
}
}else{
ll num=p[i];
for(ll k=1;k<=num;k*=2){
for(ll j=de;j>=t[i];j--){
f[j]=max(f[j],f[j-t[i]]+c[i]);
}
num-=k;
}
for(ll j=de;j>=t[i]*num;j--){
f[j]=max(f[j],f[j-t[i]*num]+num*c[i]);
}
}
}
printf("%lld",f[de]);
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n,de,f[1005],c[10005],p[10005],t[10005];
ll tin(){
ll sh=0,sm=0,eh=0,em=0,res=0;
scanf("%lld:%lld %lld:%lld",&sh,&sm,&eh,&em);
res=(eh-sh)*60+em-sm;
//printf("%lld:%lld %lld:%lld %lld\n",sh,sm,eh,em,res);
return res;
}
int main(){
de=tin();
scanf("%lld",&n);
for(int i=1;i<=n;i++){
scanf("%lld %lld %lld",&t[i],&c[i],&p[i]);
}
for(ll i=1;i<=n;i++){
if(p[i]==0){
for(ll j=t[i];j<=de;j++){
f[j]=max(f[j],f[j-t[i]]+c[i]);
}
}else{
for(int k=1;k<=p[i];k++){
for(int j=de;j>=t[i];j--){
f[j]=max(f[j],f[j-t[i]]+c[i]);
}
}
}
}
printf("%lld",f[de]);
return 0;
}