URAL 1073 Square Country(DP)

Square Country

大意: 买一块边长为 a 的正方形地需要的钱数是 a^2, 现在输入N为钱的数目,求最少购买地的块数可以凑够N。

思路:DP,由背包思想推出来的dp[i] = min(dp[i], dp[j-i*i]+1);  方块都是由正方形组成的,所以是i*i,循环的时候也是i*i。

 1 #include <stdio.h>
 2 #define min(a, b) ((a) > (b) ? (b) :(a))
 3 
 4 int n;
 5 int dp[60005];
 6 
 7 int main()
 8 {
 9     scanf("%d", &n);
10     for(int i = 1; i <= n; ++i){
11         dp[i] = i;
12     }
13     for(int i = 1; i*i <= n; ++i){
14         for(int j = i*i; j <= n; ++j){
15             dp[j] = min(dp[j], dp[j-i*i]+1);
16         }
17     }
18     printf("%d
", dp[n]);
19 
20     return 0;
21 }
URAL 1073
原文地址:https://www.cnblogs.com/Silence-AC/p/3867273.html