普通母函数模板

int c1[250001]; //代表多项式的系数
int c2[250001]; //暂存
int a[55][2]; //0记录价值,1记录数量
int main()
{
    int n;
    while(cin >> n){
        if(n<0) break;
        int sum=0;
        for(int i=0;i<n;i++)
        {
            cin >> a[i][0] >> a[i][1];
            sum+=a[i][0]*a[i][1];
        }
        for (int i=0;i<=sum;i++){
            c1[i] = 0; c2[i] = 0;
        }
        for (int i=0;i<=a[0][1];i++){ //对第一个进行初始化
            c1[i * a[0][0]] = 1;
        }
        for (int i=1;i<n;i++){
            for (int j=0;j<=sum;j++){
                for (int k=0;k<=a[i][0] * a[i][1];k+=a[i][0]){
                    c2[j+k] += c1[j];
                }
            }
            for (int j=0;j<=sum;j++){
                c1[j] = c2[j];
                c2[j] = 0;
            }
        }
        // 从一半开始找
        int m;
        if(sum%2==0) m=sum/2;
        else m=sum/2+1;
        for (int j=m;;j++){
            if(c1[j] != 0){//如果系数不等于0,存在这种可能性,则输出
                printf("%d %d\n",j,sum-j);
                break;
            }
        }
    }
    return 0;
}
模版专项 文章被收录于专栏

模版

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务