您的位置:首页 > 其它

Ural1073-Square Country

2016-12-05 16:37 387 查看
给定一个数n,求这个数最少由几个完全平方数相加得到。

状态转移方程:dp[i] = ∑dp[i-j*j]+1.

#include <cstdio>
#include <algorithm>

const int maxn = 60000 + 5;
const int inf = maxn;

int dp[maxn];

int main(int argc, char const *argv[]) {
int n;
scanf("%d", &n);
dp[0] = 0;
for (int i = 1; i <= n; i++) {
dp[i] = inf;
for (int j = 0; j * j <= i; j++) {
dp[i] = std::min(dp[i], dp[i-j*j] + 1);
}
}
printf("%d\n", dp
);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: