摔手机
#include <bits/stdc++.h> using namespace std; ///dp[i][j]表示在第i层还有j个手机,摔了dp[i][j]次 const int maxn=1001; int dp[maxn][10]; int m,n; int main() { for(int i=1;i<=1000;i++) { dp[i][1]=i; } for(int i=1;i<=1000;i++) { for(int j=2;j<=3;j++) { dp[i][j]=1+max(dp[i-1][j-1],dp[i-1][j]);//最坏的策略 for(int k=1;k<=i;k++) { dp[i][j]=min(dp[i][j],max(dp[k-1][j],dp[i-k][j-1])+1); } } } printf("%d",dp[1000][3]); return 0; }