这道题枚举状态并转移就行了
先一直吃然后喝水再一直吃
#include<bits/stdc++.h>
using namespace std;
int t,a,b;
bool f[5000010];
int ans;
int main(){
scanf("%d%d%d",&t,&a,&b);
memset(f,false,sizeof(f));
f[0]=true;
for(int i=a;i<=t;i++){
f[i]|=f[i-a];
}
for(int i=b;i<=t;i++){
f[i]|=f[i-b];
}
for(int i=1;i<+t;i++){
f[i/2]|=f[i];
}
for(int i=a;i<=t;i++){
f[i]|=f[i-a];
}
for(int i=b;i<=t;i++){
f[i]|=f[i-b];
}
ans=t;
while(!f[ans]){
ans--;
}
printf("%d",ans);
return 0;
}
转移方程f[i]|=f[i-a(b)]