[xdoj1007]易碎的鸟蛋(dp)
解题思路:f[n,m]表示n层楼、m个鸡蛋时所需要的最小次数,则
转移方程为:f[n,m] = min{ 1+max(f[i-1,m-1], f[n-i,m]) | i=1..n }初始条件:f[i,0]=0(或f[i,1]=i),对所有i
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
#define inf 0x3f3f3f3f
int arr[1002][1002];
int main(){
int n,m;
while(cin>>m>>n){
for(int i=0;i<=n;i++) arr[i][0]=0;
for(int i=0;i<=n;i++) arr[i][1]=i;
for(int i=0;i<=m;i++) arr[0][i]=0;
for(int i=0;i<=m;i++) arr[1][i]=1;
for(int i=2;i<=n;i++){
for(int j=2;j<=m;j++){
arr[i][j]=inf;
}
}
for(int i=2;i<=n;i++){
for(int j=2;j<=m;j++){
for(int k=1;k<i;k++){
arr[i][j]=min(arr[i][j],1+max(arr[k-1][j-1],arr[i-k][j]));
}
}
}
printf("%d\n",arr[n][m]);
}
return 0;
}

浙公网安备 33010602011771号