結果

問題 No.3634 Made to order
コンテスト
ユーザー snrnsidy
提出日時 2026-08-21 22:33:43
言語 C++17
(gcc 15.2.0 + boost 1.90.0)
コンパイル:
g++-15 -O2 -lm -std=c++17 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
WA  
実行時間 -
コード長 2,042 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 4,194 ms
コンパイル使用メモリ 212,488 KB
実行使用メモリ 5,888 KB
最終ジャッジ日時 2026-08-21 22:34:25
合計ジャッジ時間 3,774 ms
ジャッジサーバーID
(参考情報)
judge2_0 / judge3_0
このコードへのチャレンジ
(要ログイン)
サブタスク 配点 結果
サブタスク $1$ 20 % AC * 8
サブタスク $2$ 10 % AC * 20 WA * 1
サブタスク $3$ 70 % AC * 24 WA * 2
合計 3 * 20% = 60 点
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#include <bits/stdc++.h>

using namespace std;

int n,d;
int a[13];
int b[13];
int c[13];
int dp[1<<13][3];

int main(void)
{
	cin.tie(0);
	ios::sync_with_stdio(false);

    cin >> n >> d;
    for(int i=0;i<n;i++)
    {
        cin >> a[i] >> b[i] >> c[i];
    }


    vector <int> perm = {0,1,2};

    do
    {
        for(int i=0;i<(1<<n);i++)
        {
            for(int j=0;j<3;j++)
            {
                dp[i][j] = 1e9;
            }
        }

        dp[0][0] = 0;
        dp[0][1] = 0;
        dp[0][2] = 0;

        for(int i=0;i<(1<<n);i++)
        {
            for(int j=0;j<n;j++)
            {
                if((i&(1<<j))==0)
                {
                    int ni = i + (1<<j);
                    int A = dp[i][0] + a[j];
                    int B = max(A,dp[i][1]) + b[j];
                    int C = max(B,dp[i][2]) + c[j];
                    int arr[3] = {A,B,C};

                    if(dp[ni][perm[0]] > arr[perm[0]])
                    {
                        dp[ni][0] = arr[0];
                        dp[ni][1] = arr[1];
                        dp[ni][2] = arr[2];
                    }
                    else if(dp[ni][perm[0]]==arr[perm[0]] && dp[ni][perm[1]] > arr[perm[1]])
                    {
                        dp[ni][0] = arr[0];
                        dp[ni][1] = arr[1];
                        dp[ni][2] = arr[2];                    
                    }
                    else if(dp[ni][perm[0]]==arr[perm[0]] && dp[ni][perm[1]]==arr[perm[1]] && dp[ni][perm[2]] > arr[perm[2]])
                    {
                        dp[ni][0] = arr[0];
                        dp[ni][1] = arr[1];
                        dp[ni][2] = arr[2];                    
                    }
                }
            }
        }

        if(max(dp[(1<<n)-1][0],max(dp[(1<<n)-1][1],dp[(1<<n)-1][2])) <= d)
        {
            cout << "Yes" << '\n';
            return 0;
        }

    } while (next_permutation(perm.begin(),perm.end()));
    
    cout << "No" << '\n';

	return 0;
}
0