/动态规划问题 简单来说就是把一个复杂的问题简单化 把一个问题拆分为多个小问题 思路就是先找这个问题的初始状态,从初始状态出发,然后依次把下一阶段的值加入到这一状态中。
那蓝桥杯的砝码称重来说
你有一架天平和N 个砝码,这N 个砝码重量依次是W1, W2, … , WN。
请你计算一共可以称出多少种不同的重量?
注意砝码可以放在天平两边。
测试样例为 3 1 4 6 答案为10
通过分析题目能发现有多个阶段,也就是砝码总数为1,为2,为3这几个阶段
我们找到初始状态,也就是砝码为1的阶段 可以发现 每次多加一个砝码至多可出现四种不同状态 也就是砝码1+2 砝码1-2 砝码1 砝码2 四种 到发码3的时候 有最多16种 依次类推/
include[HTML_REMOVED]
include[HTML_REMOVED]
using namespace std;
const int N=1e5+10;
int dp[110][N];
int a[110];
int main()
{
int n;
cin>>n;
int sum=0;
for(int i=1; i<=n; i)
{
cin>>a[i];
sum+=a[i];
}
dp[1][a[1]]=1;
for(int i=2; i<=n; i)
{
for(int j=1; j<=sum; j)
{
if(dp[i-1][j]==1)
{
dp[i][a[i]]=1;
dp[i][j]=1;
dp[i][j+a[i]]=1;
int c=abs(j-a[i]);
dp[i][c]=1;
}
}
}
int ans=0;
for(int i=1; i<=sum; i)
{
if(dp[n][i]==1)
{
ans++;
}
}
cout<<ans<<endl;
}