오늘의 알고리즘

[C++] 백준 1446 지름길

하늘하늘 . 2022. 6. 4. 18:48
#include <iostream>
#include <string.h>
#include <vector>
#include <map>
 
int DP[10001] = { 10000 };
 
int main()
{
	int N = 0;
	int D = 0;
	std::cin >> N >> D;
 
	std::vector<std::vector<std::pair<int, int>>> vec(10001, std::vector<std::pair<int, int>>());
 
	for (int i = 0; i < N; ++i)
	{
		int iX = 0;
		int iY = 0;
		int iNumber = 0;
		std::cin >> iX >> iNumber >> iY;
 
		if (iNumber > D)
			continue;
 
		if (iNumber - iX < iY)
			continue;
 
		vec[iNumber].push_back({ iX,iY });
	}
 
	DP[0] = 0;
 
	for (int i = 1; i <= D; ++i) 
	{
		DP[i] = DP[i - 1] + 1;
 
		if (!vec[i].empty())
		{
			for (int j = 0; j < vec[i].size(); ++j)
			{
				DP[i] = std::min(DP[i], DP[vec[i][j].first] + vec[i][j].second);
			}
		}
	}
 
	std::cout << DP[D];
 
	return 0;
}

계산하면서 가는 걸로

1. 출발지에서 그 다음만큼의 크기를 확인