题目链接:http://acm.tju.edu.cn/toj/showp1399.html
Time Limit: 1.0 Seconds Memory Limit: 65536K
Total Runs: 370 Accepted Runs: 236
![](https://i-blog.csdnimg.cn/blog_migrate/9707ee93ff6599dd6d8461be876bf9de.png)
The first line of input contains C, the number of test cases. For each case there is an additional line containing N, the number of blocks to be shipped. N does not exceed 1000. Your program should produce one line of output per case, giving the minimal area of paper (in square inches) needed to wrap the blocks when they are stacked together.
Sample Input
5 9 10 26 27 100
Output for Sample Input
30 34 82 54 130
Source: Waterloo Local Contest Sep. 21, 2002
数论题目,数据量不大,直接打表就行,这道题主要是明白题意。
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
using namespace std;
int block[1005],c,n;
int main(){
fill(block,block+1005,6001);
for(int i=1;i<=1000;i++)
for(int j=1;j<=1000;j++){
if(i*j>1000)
break;
for(int k=1;k<=1000;k++){
if(i*j*k>1000)
break;
block[i*j*k]=min(block[i*j*k],2*(i*j+i*k+k*j));
}
}
scanf("%d",&c);
while(c--){
scanf("%d",&n);
printf("%d\n",block[n]);
}
}