一本通1300 鸡蛋的硬度

题目:鸡蛋的硬度


思路:

令f[i][j]为有i层楼j个鸡蛋的最小次数。

假设从第t层楼扔下,鸡蛋碎了,f[i][j]=f[t-1][j-1]+1

假如鸡蛋没碎,f[i][j]=f[i-t][j]+1

所以状态转移方程为f[i][j]=min(f[i][j],1+max(f[t-1][j-1],f[i-t][j]))


代码;

#include<bits/stdc++.h>
using namespace std;

#define n 100
#define m 10
#define inf (1<<30)

int N,M;
int f[n+5][m+5]= {0};

void dp() {
	for(int j=2; j<=m; j++) {
		for(int i=2; i<=n; i++) {
			for(int t=1; t<=i; t++) {
				f[i][j]=min(f[i][j],1+max(f[t-1][j-1],f[i-t][j]));
			}
		}
	}
}

void init() {
	for(int i=1; i<=n; i++) f[i][1]=i;
	for(int i=1; i<=m; i++) f[1][i]=1;
	for(int i=2; i<=n; i++) {
		for(int j=2; j<=m; j++) {
			f[i][j]=inf;
		}
	}
}

int main() {
	init();
	dp();
	while(~scanf("%d%d",&N,&M)) {
		printf("%d\n",f[N][M]);
	}

	return 0;
}

猜你喜欢

转载自blog.csdn.net/rabbit_zar/article/details/80847696
今日推荐