結果

問題 No.3634 Made to order
コンテスト
ユーザー yaaya
提出日時 2026-08-22 00:02:58
言語 C++23
(gcc 15.2.0 + boost 1.90.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 329 ms / 2,000 ms
+ 622µs
コード長 1,912 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 2,012 ms
コンパイル使用メモリ 345,244 KB
実行使用メモリ 323,968 KB
最終ジャッジ日時 2026-08-22 00:03:05
合計ジャッジ時間 6,175 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
サブタスク $1$ 20 % AC * 8
サブタスク $2$ 10 % AC * 21
サブタスク $3$ 70 % AC * 26
合計 3 * 100% = 300 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(ll i=a;i<b;i++)
#define rrep(i,a,b) for(ll i=a-1;i>=b;i--)
#define ll long long
#define ull unsigned ll
#define ld long double
#define bl __int128_t
#define fi first
#define se second
#define vel vector<ll>
#define vvel vector<vel>
#define pll pair<ll,ll>
#define vepll vector<pll>
#define vvepll vector<vepll>
#define ves vector<string>
#define vem vector<mint>
#define vvem vector<vem>
#define pmm pair<mint,mint>
#define cleout(i) cout<<fixed<<setprecision(i)
template<class T>using PQ=priority_queue<T,vector<T>,greater<T>>;
//               上  右 下 左
vector<int> di={-1, 0, 1, 0};
vector<int> dj={ 0, 1, 0,-1};

vector<int> dx={ 0, 1, 0,-1};
vector<int> dy={ 1, 0,-1, 0};


vector<int> ddx={ 1, 1, 1, 0, -1, -1, -1, 0 };
vector<int> ddy={ 1, 0, -1, -1, -1, 0, 1, 1 };

ll inf=1000000000000000000;//1e18
// LLONG_MAX

mt19937_64 rng((ull)chrono::steady_clock::now().time_since_epoch().count());

void _solve(){
    ll N,D;
    cin>>N>>D;
    vel a(N),b(N),c(N);
    rep(i,0,N)cin>>a[i]>>b[i]>>c[i];
    vel sum((1ll<<N));
    rep(i,0,(1ll<<N)){
        rep(j,0,N){
            if(i&(1ll<<j))sum[i]+=a[j];
        }
    }
    vvel dp((1ll<<N),vel(D+1,inf));
    dp[0][0]=0;
    rep(i,0,(1ll<<N)){
        rep(k,0,N){
            if(i&(1ll<<k))continue;
            rep(j,0,D+1){
                if(dp[i][j]==inf)continue;
                ll p=max(0ll,j-a[k]);
                if(p+b[k]<=D)dp[i|(1ll<<k)][p+b[k]]=min(dp[i|(1ll<<k)][p+b[k]],max(0ll,dp[i][j]-(max(0ll,a[k]-j)+b[k]))+c[k]);
            }
        }
    }
    ll ans=inf;
    rep(i,0,D+1){
        ans=min(ans,sum.back()+i+dp.back()[i]);
    }
    cout<<(ans<=D?"Yes\n":"No\n");
}


int main(){
    cin.tie(nullptr);
 	ios_base::sync_with_stdio(false);

    
    ll _;
    bool multitest=0;
    if(multitest)cin>>_;
    else _=1;
    rep(__,0,_){
        _solve();
    }
}
0