n分解成平方数的和,求分割次数最少的方案。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int n; 5 6 void solve() { 7 vector<vector<int>> dp(n + 1, vector<int>()); 8 for (int i = 0; i <= n; ++i) { 9 for (int j = 1; i + j * j <= n; ++j) { 10 int idx = i + j * j; 11 if (dp[idx].empty() || dp[idx].size() > dp[i].size() + 1) { 12 dp[idx] = dp[i]; 13 dp[idx].push_back(j); 14 } 15 } 16 } 17 dp[0].push_back(0); 18 for (auto a : dp[n]) cout << a << "(" << a * a << ") "; 19 cout << endl; 20 } 21 22 int main() { 23 while (cin >> n) { 24 solve(); 25 } 26 return 0; 27 }