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 }