Leetcode 983:最低票價

這道題我竟然看了很久很久,因爲我始終沒理解basecase怎麼給。很明顯第1天應該給costs[0],因爲只有一天,那第二天呢?如果每天都是當天的最低,那應該從哪天開始算?還有,如果第2天有,第8天有,那第8天算的時候,按照下面的代碼,cost[1]1的這個“7”的開頭應該是第2天,爲啥不是第3天呢?也就是爲什麼tmp1等於的是a[i-7]+costs[1]而是a[i-6]+costs[1]。最後這個問題,應該是讓“7”這個數字的價值最大化,因爲隨着時間的增長,數組的值是單調不減的。至於前面那個問題,basecase怎麼給,下面的代碼給出了一個a[0],這個a[0]=0,結果就是,小於30的時候,30天的那個值都是0+costs[2]。

我覺得這道題我以後還得不會

int mincostTickets(vector<int>& days, vector<int>& costs) {
	vector<int>a(366,INT_MAX);
	a[0]=0;
	for(int i=1;i<(int)a.size() ; ++i)
	{
		if(days.end() == find(days.begin(),days.end(),i))
		{
			a[i]=a[i-1];
			continue;
		}
		int tmp1 = a[max(i-1,0)]+costs[0];
		int tmp2 = a[max(i-7,0)]+costs[1];
		int tmp3 = a[max(i-30,0)]+costs[2];
		a[i] = min(tmp1,min(tmp2,tmp3));
	}
	return a[365];
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章