题解
2025-08-06 08:53:37
发布于:浙江
14阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int h1,m1,h2,m2,n,m,w,c,p,dp[10001];
int main(){
scanf("%d:%d %d:%d %d",&h1,&m1,&h2,&m2,&n);
m=(h2-h1)*60-m1+m2;
for(int i=1;i<=n;i++){
cin>>w>>c>>p;
if(p==0||p*w>=m)for(int j=w;j<=m;j++)dp[j]=max(dp[j],dp[j-w]+c);
else if(p==1)for(int j=m;j>=w;j--)dp[j]=max(dp[j],dp[j-w]+c);
else
for(int k=1;p;k<<=1){
int x=min(k,p);
for(int j=m;j>=w*x;j--)dp[j]=max(dp[j],dp[j-w*x]+c*x);
p-=x;
}
}
cout<<dp[m]<<"\n";
return 0;
}
大佬给你个赞再走吧。
全部评论 1
2025-08-05 来自 浙江
0
有帮助,赞一个