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 }

 

你可能感兴趣的:(UP)