dp+bitset

void solve()
{
    int n,x;std::cin>>n>>x;
    std::vector<int>a(n),b(n);
    for(int i=0;i<n;i++)std::cin>>a[i]>>b[i];
    std::vector dp(n+1,std::vector(x+1,0));
    dp[0][0]=1;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<=x;j++)
        {
            if(dp[i][j])
            {
                if(j+a[i]<=x)dp[i+1][j+a[i]]=1;
                if(j+b[i]<=x)dp[i+1][j+b[i]]=1;
            }
        }
    }
    std::cout<<(dp[n][x]?"Yes":"No");
}
void solve()
{
    int n,x;std::cin>>n>>x;
    std::bitset<(int)(1e4+1e1)>f;
    f[0]=1;
    for(int i=0,a,b;i<n;i++)
    {
        std::cin>>a>>b;
        f=(f<<a)|(f<<b);
    }
    std::puts(f[x]?"Yes":"No");
}

 C - Jumping Takahashi (atcoder.jp)

posted @ 2023-02-15 16:12  惣聪术  阅读(17)  评论(0)    收藏  举报