给出DP解,因为每一分钟过完后,一个用电器的电量-2,一个用电器的电量+1,
dp[x][y]=max(dp[x-2][y+1],dp[x+1][y-2]);
所以不能直接用递推求解,用记忆化搜索是可以的。
因为不存在环,也就是说总电量是在减小的。
#include<cstdio>
#include<string>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
const int INF =0x3f3f3f3f;
const int maxn= 150 ;
int dp[maxn+5][maxn+5];
int DP(int a,int b)
{
if(~dp[a][b]) return dp[a][b];
if(a==0||b==0||a==1&&b==1) return dp[a][b]=0;
if(a==1) return dp[a][b]=1+DP(a+1,b-2);
else if(b==1) return dp[a][b]=1+DP(a-2,b+1);
dp[a][b]=max(1+DP(a+1,b-2),1+DP(a-2,b+1));
return dp[a][b];
}
int main()
{
int a,b;
memset(dp,-1,sizeof dp);
while(~scanf("%d%d",&a,&b))
{
printf("%d\n",DP(a,b));
}
return 0;
}