這道題我竟然看了很久很久,因爲我始終沒理解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];
}