#include<bits/stdc++.h>
using namespace std;
const long long mod=1000000007;
const long long inf=mod*mod;
const long long d2=500000004;
const double EPS=1e-6;
const double PI=acos(-1.0);
int ABS(int a){return max(a,-a);}
long long ABS(long long a){return max(a,-a);}
const int D_MAX_V=302;
const int D_v_size=302;
struct D_wolf{
long long c;
int t,r;
D_wolf(){t=c=r=0;}
D_wolf(int t1,long long c1,int r1){
t=t1;c=c1;r=r1;
}
};
vector<D_wolf>D_G[D_MAX_V];
int D_level[D_MAX_V];
int D_iter[D_MAX_V];
void add_edge(int from,int to,long long cap){
D_G[from].push_back(D_wolf(to,cap,D_G[to].size()));
D_G[to].push_back(D_wolf(from,0,D_G[from].size()-1));
}
void D_bfs(int s){
for(int i=0;i<D_v_size;i++)D_level[i]=-1;
queue<int> Q;
D_level[s]=0;
Q.push(s);
while(Q.size()){
int v=Q.front();
Q.pop();
for(int i=0;i<D_G[v].size();i++){
if(D_G[v][i].c>0&&D_level[D_G[v][i].t]<0){
D_level[D_G[v][i].t]=D_level[v]+1;
Q.push(D_G[v][i].t);
}
}
}
}
int D_dfs(int v,int t,long long f){
if(v==t)return f;
for(;D_iter[v]<D_G[v].size();D_iter[v]++){
int i=D_iter[v];
if(D_G[v][i].c>0&&D_level[v]<D_level[D_G[v][i].t]){
long long d=D_dfs(D_G[v][i].t,t,min(f,D_G[v][i].c));
if(d>0){
D_G[v][i].c-=d;
D_G[D_G[v][i].t][D_G[v][i].r].c+=d;
return d;
}
}
}
return 0;
}
long long max_flow(int s,int t){
long long flow=0;
for(;;){
D_bfs(s);
if(D_level[t]<0)return flow;
for(int i=0;i<D_v_size;i++)D_iter[i]=0;
long long f;
while((f=D_dfs(s,t,inf))>0){flow+=f;}
}
return 0;
}
int p[110];
int main(){
int a;scanf("%d",&a);
for(int i=0;i<a;i++)scanf("%d",p+i+1);
int S=a+a;
int T=a+a+1;
long long ks=0;
for(int i=0;i<a;i++){
add_edge(i,i+a,inf);
add_edge(S,i,max(0,p[i+1]));
add_edge(i+a,T,max(0,-p[i+1]));
if(p[i+1]>0)ks+=p[i+1];
for(int j=0;j<a;j++){
if((i+1)%(j+1)==0){
add_edge(i,j+a,inf);
}
}
}
long long ret=max_flow(S,T);
printf("%lld\n",ks-ret);
}
./Main.cpp: In function ‘int main()’:
./Main.cpp:72:22: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
int a;scanf("%d",&a);
^
./Main.cpp:73:39: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result]
for(int i=0;i<a;i++)scanf("%d",p+i+1);
^