fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 9329 (C++) 패스트 푸드 상금
최초 업로드: 2025-10-20 08:26:36
최근 수정 시간: 2025-10-20 08:26:36
게시자: rlatjwls3333
카테고리: 백준
조회수: 7
# [Bronze I] 패스트 푸드 상금 [문제 링크](https://www.acmicpc.net/problem/9329) ## 문제 설명 <p>ACM-ICPC 아시아 지역 대회기간 중 대전의 패스트 푸드 음식점들은 그들의 음식점을 홍보하기 위해 이벤트를 준비한다. 특정 음식을 먹을 때 마다 스티커를 하나 제공하는데 스티커를 모으면 상금으로 교환할 수 있다. 같은 종류의 스티커가 필요한 상금은 여러 번 교환할 수 있으며, 같은 종류의 스티커를 가진 서로 다른 액수의 상금은 존재하지 않는다. 상금 교환에 필요없는 스티커도 있다.</p> <p>지역대회를 보러 가면서, 당신의 코치가 패스트 푸드 음식점에서만 식사를 하도록 허락했을 때, 얼마나 많은 상금을 획득할 수 있을까?</p> ## 입력 <p>입력은 여러개의 테스트 케이스로 이루어져있다. 각 테스트 케이스마다 첫째 줄에는 서로 다른 상금의 종류 n (1 ≤ n ≤ 10) 과 코치가 가지고 있는 스티커의 종류 (1 ≤ m ≤ 30, 종류는 1부터 m까지 번호가 매겨진다) 가 주어진다. 다음 n개의 줄은 상금에 관한 정보가 주어지는데 각 줄마다 첫 번째 정수는 해당 상금에 필요한 스티커의 개수 k (1 ≤ k ≤ m) 가 주어지며 뒤이어 k개의 정수에는 해당 상금에 필요한 스티커의 종류가 주어지며 마지막으로 상금의 액수가 주어진다 (최대 1,000,000) . n개의 모든 입력이 주어진 후 마지막 줄은 코치가 가지고 있는 1부터 m까지 스티커의 개수가 각각 주어진다. 각각의 스티커의 개수는 100개 이하이다.</p> ## 출력 <p>각각의 케이스마다 최대 상금의 액수를 한줄씩 출력한다.</p> ## 풀이 문제 번역이 좀 이상합니다. 원문은 이렇습니다. "No two prizes will require the same type of stickers" ``` c++ #include<bits/stdc++.h> using namespace std; int price[10], cnt[31]; int main() { ios::sync_with_stdio(0); cin.tie(0); int t; cin >> t; while(t--) { int n, m; cin >> n >> m; vector<vector<int>> need; for(int i=0;i<n;i++) { int cnt; cin >> cnt; need.push_back(vector<int>(cnt)); for(int j=0;j<cnt;j++) cin >> need.back()[j]; cin >> price[i]; } int total=0; for(int i=1;i<=m;i++) cin >> cnt[i]; for(int i=0;i<n;i++) { int cur=INT_MAX; for(int j=0;j<need[i].size();j++) cur = min(cur, cnt[need[i][j]]); for(int j=0;j<need[i].size();j++) cnt[need[i][j]] -= cur; total += price[i]*cur; } cout << total << '\n'; } } ```