很简单的一道01题目
dalao看到这里已经可以划走了,本文主要就是科普一下
首先要遍历一下所有小于S的数的约数,将它们存在B数组里
这里i就相当于01模版里的w体积,Bi相当于c价值
代码就很简单了:
#include<bits/stdc++.h>
using namespace std;
int s,b[1001],f[1001];
int work(int p){
int s1=0;
for(int j=1;j<=p-1;j++){
if(p%j==0){
s1+=j;
}
}
return s1;
}
int main(){
scanf("%d",&s);
for(int i=1;i<=s;i++){
b[i]=work(i);
}
for(int i=1;i<=s;i++){
for(int j=i;j<=s;j++){
if(f[j]<=(f[j-i]+b[i])){
f[j]=f[j-i]+b[i];
}
}
}
cout<<f[s];
}
通过截图: