一方砖多少块:C++中的方砖问题来源: 发布时间:星期日, 2009年8月16日 浏览:72次 评论:0
/*
Problem description 用边长小于N正方形方砖(注意不要求所有方砖大小相同请看样例介绍说明)不重叠地铺满N*N正方形房间最少要几块方砖 Input 第行是个整数T,表示测试数据组数,接下来T 行每行是个N(2<=N<=100) Output 对于每组测试数据输出行为最少需要块数 Sample Input 245 Sample Output 48 */ # <iostream> using std; GetNum( m, n) { a=0; (n0) { 0; } a m/n; a GetNum(n,m%n); a; } { T,N,temp,sum = 0,k=0; //freopen("10086.txt","r",stdin); cin>>T; *pRes = [T]; while (k<T) { cin>>N; (N%20) { pRes[k]=4; k; continue; } (N%30) { pRes[k]=6; k; continue; } sum = N*N; for ( i=N/2+1;i<N;i) { temp = 0; temp GetNum(N,i); temp GetNum(N,N-i); (sum > temp) sum = temp; } pRes[k]=sum; k; } for ( t=0;t<T;t) cout<<pRes[t]<<endl; //fclose(stdin); 0; } # <stdio.h> # MAX_N 100 n; f[MAX_N+1][MAX_N+1]; min( a, b ) { ( a < b ) a; b; } CalF( x, y ) { res, k; ( ( x y ) && ( x < n ) ) 1; { res = 100000; for( k = ( x / 2 ); k < x; k ) res = min( res, f[k][y] + f[x-k][y] ); res; } } void work { x, y; for( x = 1; x <= n; x ) for( y = 1; y <= n; y ) { f[x][y] = CalF(x,y); f[y][x] = f[x][y]; } } void { for( n = 2; n <= MAX_N; n ) { work; prf("%5d %5d\n",n,f[n][n]); } } 0
相关文章读者评论发表评论 |