题目很明显的一道dp题目。
方程也不难推 dp[i][0]表示饱食度为i没喝水 dp[i][1]表示当前饱食度为i已经喝了水
#include <cstdio> #include <algorithm> using namespace std; int t,a,b,Max; bool dp[5000055][2]; int main(){ scanf("%d%d%d",&t,&a,&b); dp[0][0]=1; for(int i=0;i<=t;i++){ if(dp[i][0]){ if(a+i<=t) dp[a+i][0]=1; if(b+i<=t) dp[b+i][0]=1; dp[i/2][1]=1; } } for(int i=0;i<=t;i++){ if(dp[i][1]){ if(a+i<=t) dp[a+i][1]=1,Max=max(Max,a+i); if(b+i<=t) dp[b+i][1]=1,Max=max(Max,b+i); } } printf("%d\n",Max); return 0; }
时间: 2024-11-06 09:20:39