_xiaobai_

导航

zoj3141 nie's Dog Biscuits(DP)

/*
 简单的DP:区间动态规划,对于一个m*n的蛋糕只有横竖两类切法
     f( m, n ) = min{ f( m, i ) + f( m, n-i ), f( j, n ) + f( m-j, n ) }
*/

View Code
 1 #include <stdio.h>
2
3 short F[ 201 ][ 201 ];
4
5 int main()
6 {
7 for ( int i = 0 ; i <= 200 ; ++ i )
8 for ( int j = 0 ; j <= 200 ; ++ j )
9 F[ i ][ j ]= i*j;
10
11 for ( int i = 1 ; i <= 200 ; ++ i )
12 F[ i ][ i ] = 1;
13
14 for ( int i = 1 ; i <= 200 ; ++ i )
15 for ( int j = 1 ; j <= 200 ; ++ j ) {
16 for ( int k = 2 ; k < j ; ++ k )
17 if ( F[ i ][ j ] > F[ i ][ k ] + F[ i ][ j-k ] ) {
18 F[ i ][ j ] = F[ i ][ k ] + F[ i ][ j-k ];
19 }
20 for ( int k = 2 ; k < i ; ++ k )
21 if ( F[ i ][ j ] > F[ k ][ j ] + F[ i-k ][ j ] )
22 F[ i ][ j ] = F[ k ][ j ] + F[ i-k ][ j ];
23 }
24
25 int n,m,t;
26 while ( ~scanf("%d",&t) )
27 while ( t -- ) {
28 scanf("%d%d",&n,&m);
29 printf("%d\n",F[ n ][ m ]-1);
30 }
31 return 0;
32 }

posted on 2011-08-17 14:29  _xiaobai_  阅读(219)  评论(0编辑  收藏  举报