0:0 16:40 1
1 1 0
1000
理由:
下面这份代码可以顺利 AC,但明显第 31 行有问题,理论上 c 要设置成 INF,也就是至少 1000,但经测试本题中 838 已经能够 AC,说明一棵可以看无限次的樱花树最多被看了 838 次。
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
int dp[40010];
int read(){
int back=0,f=1;
char x=getchar_unlocked();
while(!(x>='0'&&x<='9')){
if(x=='-'){
f=-1;
}
x=getchar_unlocked();
}
while(x>='0'&&x<='9'){
back*=10;
back+=x-'0';
x=getchar_unlocked();
}
return back*f;
}
int main(){
int n,t1h,t1m,t2h,t2m;
t1h=read(),t1m=read(),t2h=read(),t2m=read(),n=read();
t1m+=t1h*60;
t2m+=t2h*60;
int V=t2m-t1m;
while(n--){
int v,w,c;
cin >> v >> w >> c;
if(c==0){
c=838;//这句话,应该至少为1000,但只要838就能够AC
}
for(int i=1;c;i*=2){
if(i<=c){
c-=i;
}
else{
i=c;
c=0;
}
for(int j=V;j>=v*i;j--){
dp[j]=max(dp[j],dp[j-v*i]+w*i);
}
}
}
cout << dp[V];
return 0;
}