UPC 2188 Balls(DP)

比赛的时候,大体还是想出来了,有些细节没想好,虎哥提示了下,我写写代码,过了样例,就过了。。。智商拙计啊。。。看题看了好一会,才看懂题意,想了好一会,最后还没写出来。。。

 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][51];
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 cas,num,n,m;
32     scanf("%d",&cas);
33     while(cas--)
34     {
35         scanf("%d%d%d",&num,&n,&m);
36         printf("%d %d\n",num,dfs(m,n));
37     }
38     return 0;
39 }

 

posted @ 2013-05-22 14:10  Naix_x  阅读(165)  评论(0编辑  收藏  举报