Programming Practice/SWEA
[SWEA] 3752. 가능한 시험 점수 - D4
Cage
2022. 5. 14. 21:40
문제
* 해당 문제의 모든 저작권은 SWEA 측에 있으며 본 블로그는 학업 흔적을 남겨 학업 상향을 위한 블로그로 이익을 추구하지 않으며 SWEA 측의 약관을 위배하지 않음을 명시합니다.*
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AWHPkqBqAEsDFAUn
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
풀이
DP와 방문배열만 있으면 해결할 수 있는 간단한 문제이다.
숫자를 받고 그 숫자와 지금까지 벡터에 저장된 값을 더해보고 새로운 값이라면 벡터에 추가하면 된다.
소스 코드
#include <iostream>
#include <string>
#include <stack>
#include <set>
#include <queue>
#include <deque>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <map>
#include <cctype>
#include <set>
#include <string.h>
// std::
using namespace std;
// 테스트 케이스
int T, test_case;
//사용할 변수
vector<int> v;
int dp[10001];
// 메인 함수
int main() {
/*
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
*/
cin >> T;
for (test_case = 1; test_case <= T; test_case++) {
int N, size = 0, max = 0;
memset(dp, 0, sizeof(dp));
cin >> N;
v.push_back(0);
dp[0] = 1;
for (int i = 0; i < N; i++) {
int num, size = v.size();
cin >> num;
for (int n = 0; n < size; n++) {
int sum = num + v[n];
if (dp[sum] == 0) {
dp[sum] = 1;
v.push_back(sum);
}
}
}
cout << "#" << test_case << " " << v.size() << '\n';
v.clear();
}
}