题解 P1734 【最大约数和】

· · 题解

思路

本题实质就是一个背包问题。s为背包的容量,物品则为1s间的所有数,物品的体积就是数的值,而价值则为数的除了本身的因子和。定义fsum(x)x的非本身因子和,那么本题的状态转移方程便很容易得到了。

### 代码 ```cpp #include<bits/stdc++.h> using namespace std; int s,dp[1010]; int fsum(int x) { int sum=0; for(int i=1;i<x;i++) { if(!(x%i)) sum+=i; } return sum; } int main() { cin>>s; for(int i=1;i<=s;i++) { for(int j=s;j>=i;j--) { dp[j]=max(dp[j],dp[j-i]+fsum(i)); } } cout<<dp[s]<<endl; return 0; } ```