甚至可以直接暴力模拟
查看原帖
甚至可以直接暴力模拟
720078
zzczzczzc楼主2024/3/1 00:10

思路和二维的01dp定义差不多,这种蒟蒻模拟复杂度会更高(篮球杯数据有点水,居然能过),但是方便不懂二维01dp的来理解。

集合now,目前所有称出的重量 集合newnow,用砝码去和集合里面的做加减

然后合并now和newnow。

#include <bits/stdc++.h>
//#define int long long
#define per(i,j,k) for(int (i)=(j);(i)<=(k);++(i))
#define rep(i,j,k) for(int (i)=(j);(i)>=(k);--(i))
#define debug(a) cout<<#a<<"="<<a<<endl
#define fr first
#define se second
#define endl '\n'
using namespace std;
const int N=100+5;

int n,w[N];

void solve(){
    cin>>n;
    per(i,1,n)cin>>w[i];

    set<int>now,newnow;

    now.insert(w[1]);
    now.insert(0);
    per(i,2,n){
        for(auto j:now)
            newnow.insert(abs(j+w[i])),newnow.insert(abs(j-w[i]));

        for(auto j:newnow)
            now.insert(j);
    }

    cout<<now.size()-1;//最后0是不算的
}

signed main(){
    ios::sync_with_stdio(false),cin.tie(nullptr);
    int t=1;
    while(t--)solve();
    return 0;
}
2024/3/1 00:10
加载中...