diff --git "a/khj20006/202512/30 BOJ G3 \352\267\240\355\230\225\354\235\230 \354\260\275\354\241\260\354\236\220.md" "b/khj20006/202512/30 BOJ G3 \352\267\240\355\230\225\354\235\230 \354\260\275\354\241\260\354\236\220.md" new file mode 100644 index 00000000..eac2be56 --- /dev/null +++ "b/khj20006/202512/30 BOJ G3 \352\267\240\355\230\225\354\235\230 \354\260\275\354\241\260\354\236\220.md" @@ -0,0 +1,43 @@ +```cpp +#include +using namespace std; + +const int INF = 1e9 + 7; + +int N, I, G; +int dp[202][202]{}; + +int main() { + cin.tie(0)->sync_with_stdio(0); + + cin>>N>>I>>G; + for(int i=0;i<=201;i++) for(int j=0;j<=201;j++) dp[i][j] = INF; + dp[0][0] = 0; + + for(int i,g;N--;) { + cin>>i>>g; + int ndp[202][202]{}; + for(int a=0;a<=201;a++) for(int b=0;b<=201;b++) ndp[a][b] = INF; + for(int a=0;a<=200;a++) for(int b=0;b<=200;b++) if(dp[a][b] != INF) { + int A = min(201, a+i), B = min(201, b+g); + ndp[A][B] = min(ndp[A][B], dp[a][b] + 1); + } + for(int a=0;a<=200;a++) { + if(dp[201][a] != INF) { + int A = min(201, a+g); + ndp[201][A] = min(ndp[201][A], dp[201][a] + 1); + } + if(dp[a][201] != INF) { + int A = min(201, a+i); + ndp[A][201] = min(ndp[A][201], dp[a][201] + 1); + } + } + for(int a=0;a<=201;a++) for(int b=0;b<=201;b++) dp[a][b] = min(dp[a][b], ndp[a][b]); + } + + int ans = INF; + for(int i=I;i<=201;i++) for(int j=G;j<=201;j++) ans = min(ans, dp[i][j]); + cout<<(ans == INF ? -1 : ans); + +} +```