解题思路:

注意事项:

参考代码:

#include<bits/stdc++.h>//一维dp,思路是

//把每个砝码拆成一正一反两个质量,这样所有砝码都只需要放左边就行了。

using namespace std;

#define maxw 100010

#define maxn 110

int n;

int sum=0;

int a[maxn<<1];

int dp[maxw];

void init(){

    memset(a,0,sizeof(a));

}

void debug(){

    for(int i=1;i<=sum;i++){

        printf("%d ",dp[i]);

    }putchar('\n');

}

int main(){

    init();

    scanf("%d",&n);

    for(int i=1;i<=n;i++){

        scanf("%d",&a[i]);

        sum+=a[i];

    }

    for(int i=n+1;i<=n*2;i++){

        a[i]=-a[i-n];

    }

    dp[0]=1;

    for(int i=1;i<=n;i++){

        for(int j=sum;j>=0;j--){

            if(dp[j]==1&&j+a[i]>0){

                dp[j+a[i]]=1;

            }

        }

        //debug();

    }

    for(int i=n+1;i<=2*n;i++){

        for(int j=0;j<=sum;j++){

            if(dp[j]==1&&j+a[i]>0){

                dp[j+a[i]]=1;

            }

        }

        //debug();

    }

    //debug();

    int ans=0;

    for(int i=1;i<=sum;i++){

        if(dp[i])ans++;

    }

    printf("%d",ans);

    return 0;

}


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论