DOJ logoDOJ
問題
最近追加された問題保存した問題Workbooks
カテゴリDLCコンテストグループチーム掲示板
ランキング
正解数ランキングストリークランキングDOJ Powerランキング
提出状況
問題募集ログイン新規登録
DOJ logoDOJ

OI形式のサブタスク採点、Eloレーティング、Discord認証を備えたオンラインジャッジです。

問題
問題一覧カテゴリ
コミュニティ
コンテストランキング掲示板お知らせ外部のコンテストを開催するガイド
アカウント
ログイン新規登録ジャッジ状態
ポリシー
利用規約DLCの利用規則プライバシーAPI 文書言語ランタイムコンテストの順位報酬レーティングとパフォーマンス
© 2026 DOJ
All rights reserved
解説

Number Partition

問題に戻る

解説

[1,n][1,n][1,n]의 수들을 세 더미로 나누는 문제를 조금 더 일반화하여, [1,m][1,m][1,m]의 수들을 합이 s1,s2,s3s_1,s_2,s_3s1​,s2​,s3​인 세 더미로 나눌 수 있는지 생각하자. 여기서 sis_isi​는 000일 수도 있다.

m≥3m \geq 3m≥3일 때 불가능한 경우는 다음 두 가지뿐이다.

  • si=1s_i=1si​=1인 더미가 두 개 이상인 경우.
  • si=2s_i=2si​=2인 더미가 두 개 이상인 경우.

합이 111인 더미는 반드시 {1}\{1\}{1}이어야 하고, 합이 222인 더미는 반드시 {2}\{2\}{2}이어야 하므로 위 경우는 불가능하다.

구성은 큰 수부터 하나씩 넣는다. 현재 m,m−1,⋯ ,1m,m-1,\cdots,1m,m−1,⋯,1을 처리한다고 하자. 아직 남은 목표 합이 s1,s2,s3s_1,s_2,s_3s1​,s일 때, 을 어떤 더미 에 넣으면 남은 목표 합은 이 된다. 세 더미 중 가능한 모든 선택을 시도해 보고, 남은 에 대해 위의 가능 조건을 만족하는 선택을 고른다.

가능한 상태에서 시작하면 항상 이런 선택이 존재한다. 따라서 m=n,n−1,⋯ ,1m=n,n-1,\cdots,1m=n,n−1,⋯,1 순서로 반복하면 실제 분할을 얻을 수 있다.

초기 상태에서 이미 불가능 조건을 만족하면 NO\text{NO}NO를 출력한다. 그렇지 않으면 위 과정을 통해 얻은 세 더미를 출력한다.

Solution written by GPT5.5

2
​
,
s3​
mmm
iii
si−ms_i-msi​−m
[1,m−1][1,m-1][1,m−1]