uva 11407 – squares

Contents

Problem

題目網址
中文網址

注意同樣數字,重複出現仍算不同項。

Solution

建完表後做 DP,像背包問題。

Code

UVa 11407UVa 11407 - Squares
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

#define MIN(a,b) ((a)<(b)?(a):(b))
#define N 101
#define M 10001

int ()
{
int dp[M] = {};
int square[N] = {}, i, j;

for (j = 1; j < M; ++j)
dp[j] = 10001;

for (i = 1; i < N; ++i)
square[i] = i*i;

for (i = 1; i < N; ++i)
for (j = square[i]; j < M; ++j)
dp[j] = MIN(dp[j - square[i]] + 1, dp[j]);

int n,Case;
scanf("%d", &Case);
while (Case--)
{
scanf("%d", &n);
printf("%dn", dp[n]);
}

return 0;
}