HDU - 6789

题目链接:HDU - 6789


直接枚举死亡的两个人即可。

然后dp[i][j]为第一个人剩的血量为 i 第二个为 j 的最小次数。

然后枚举转移即可。

代码比赛的时候过了,然后HDU上面卡常。


AC代码:

#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
using namespace std;
int dp[1010][1010],n=1000;
int calc(int x,int y,int z){
	for(int i=1;i<=n;i++)	dp[0][i]=dp[i][0]=(i+z-1)/z;
	for(int i=1;i<=n;i++)	for(int j=1;j<=n;j++){
		dp[i][j]=dp[max(0,i-y)][max(0,j-x)]+1;
		dp[i][j]=min(dp[i][j],min(dp[max(0,i-z)][j]+1,dp[i][max(0,j-z)]+1));
	}
	return dp[n][n];
}
void solve(){
	int x,y,z;	cin>>x>>y>>z;
	cout<<min(calc(x,y,z),min(calc(y,z,x),calc(x,z,y)))<<endl;
}
signed main(){
	int T; cin>>T; while(T--) solve();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43826249/article/details/107598807
hdu