思路
多重背包模板,并且暴力都能过,三层循环,最外层从1到n枚举前i个樱花,第二层从w[i]到t枚举时间,第三层从1到p[i]枚举次数。
如果p[i]等于零,我们就直接赋值为100,因为Pi(0≤Pi≤100)。
输入
用一个char把冒号吃掉。
代码
#include<bits/stdc++.h>
#define endl '\n';
using namespace std;
int t1,t2,t3,t4;int n,m;
const int N=1e5+10;
long long w[N],v[N],t[N],dp[N];
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
char c;
cin>>t1>>c>>t2>>t3>>c>>t4>>n;
m=t3*60+t4-t1*60-t2;
for(int i=1;i<=n;i++){
cin>>w[i]>>v[i]>>t[i];
if(!t[i])t[i]=1000;
}for(int i=1;i<=n;i++){
for(int j=m;j>=w[i];j--){
for(int k=1;k<=t[i]&&w[i]*k<=j;k++){
dp[j]=max(dp[j],dp[j-w[i]*k]+v[i]*k);
}
}
}cout<<dp[m];
return 0;
}