原题链接 “蓝桥杯”练习系统
一道简单dp题
#include <bits/stdc++.h>
using namespace std;
bool dp[110][100010];
int a[110];
int sum;
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=sum;j++){
dp[i][j]=dp[i-1][j];
if(!dp[i][j]){
if(j==a[i])dp[i][j]=1;
if(dp[i-1][j+a[i]])dp[i][j]=1;
if(dp[i-1][abs(j-a[i])]) dp[i][j]=1;
}
}
}
int cn=0;
for(int i=1;i<=sum;i++)
if(dp[n][i])cn++;
cout<<cn<<endl;
return 0;
}
[点击并拖拽以移动]