以前做过的一题,URAL数据强点,优化了一下。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5 #include <map> 6 #include <ctime> 7 #include <cmath> 8 #include <algorithm> 9 using namespace std; 10 int dp[1001][11]; 11 int dfs(int n,int m) 12 { 13 int i,temp,ans; 14 if(dp[n][m] > 0) 15 return dp[n][m]; 16 if(m == 1) 17 return n; 18 if(n <= 2) 19 return n; 20 ans = 100000; 21 for(i = 2;i <= n-1;i ++) 22 { 23 temp = max(dfs(i-1,m)+1,dfs(n-i,m-1)+1); 24 ans = min(temp,ans); 25 } 26 dp[n][m] = ans; 27 return dp[n][m]; 28 } 29 int main() 30 { 31 int n,m; 32 while(scanf("%d%d",&n,&m)!=EOF) 33 { 34 if(n == 0&&m == 0) break; 35 if(n > 10) n = 10; 36 printf("%d ",dfs(m,n)); 37 } 38 return 0; 39 }