※이 설명은 공식 솔루션이 아닌 작성자의 개인적인 솔루션입니다.
이 문제가 굉장히 쉬워지는 이유는 "주식을 살 경우 손해가 되면 주식을 안 사도 되기" 때문입니다.
만약 무조건 주식을 하나를 사야된다고 하면, 이 문제는 Dynamic Programming 기법으로 접근해야 겠지만, 지금과 같은 경우에는 최댓값이 0보다 크거나 같은 양수가 나오면 무조건 더해주기만 하면 답이 나옵니다.
굉장히 쉬운 문제로, 저희 학교 대회 당시에도 제일 높은 정답률을 보여주었습니다.
※해당 소스코드는 참고용이며, 최적화 된 공식 솔루션 소스가 아닙니다. 이 소스를 그대로 복사하여 이용, 또는 제출하는 행위에 대한 불이익은 책임지지 않습니다.
#include<iostream>
#include<algorithm>
using namespace std;
int w[1000][3];
int main()
{
int tc;
cin >> tc;
while (tc--)
{
int n;
ll ans = 0;
cin >> n;
for (int i = 0; i < n; i++) cin >> w[i][0] >> w[i][1] >> w[i][2];
for (int i = 0; i < n; i++)
{
int val = max(w[i][0], max(w[i][1], w[i][2]));
if (val < 0) continue;
ans += val;
}
cout << ans << "\n";
}
}