看了看题解说是要优化才能过但我直接上裸的多重背包和完全背包就过了
代码:
#include <iostream>
using namespace std;
int hh,mm,hhh,mmm;
int n;
int V;
int dp[10010];
int main()
{
scanf("%d:%d",&hh,&mm);
scanf("%d:%d",&hhh,&mmm);
scanf("%d",&n);
V = (hhh*60+mmm) - (hh*60+mm);
for(int i = 1;i <= n;i++)
{
int w,v,s;
cin >> v >> w >> s;
if(s == 0)
{
for(int j = v;j <= V;j++)
{
dp[j] = max(dp[j],dp[j-v]+w);
}
}
else
{
for(int j = V;j >= 0;j--)
for(int k = 1;k <= s && k * v <= j;k++)
dp[j] = max(dp[j],dp[j-k*v]+k*w);
}
}
cout<<dp[V];
return 0;
}
记录
声明一下我没有开O2,
很抱歉我只是一个大蒟蒻没有提供数据