-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path983.cpp
More file actions
54 lines (52 loc) · 1.4 KB
/
983.cpp
File metadata and controls
54 lines (52 loc) · 1.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class Solution {
public:
int dp[370];
Solution(){
memset(dp,-1,sizeof(dp));
}
int solve(unordered_set<int>& days, vector<int>& costs, int i){
if(i>365)
return 0;
if(dp[i]!=-1)
return dp[i];
int res = INT_MAX;
if(days.count(i)){
res = min({solve(days,costs,i+1)+costs[0],
solve(days,costs,i+7)+costs[1],
solve(days,costs,i+30)+costs[2]});
}
else{
res = solve(days,costs,i+1);
}
return dp[i] = res;
}
int mincostTickets(vector<int>& days, vector<int>& costs) {
unordered_set<int> d(days.begin(),days.end());
return solve(d,costs,1);
}
};
class Solution {
public:
int mincostTickets(vector<int>& days, vector<int>& costs) {
int day = days[days.size()-1];
int dp[day+1];
memset(dp,0,sizeof(dp));
bool travel[day+1];
memset(travel,false,sizeof(travel));
for(int i=0; i<days.size(); i++){
travel[days[i]] = true;
}
for(int i=1; i<=day; i++){
if(!travel[i]){
dp[i] = dp[i-1];
continue;
}
dp[i] = min({
dp[i-1] + costs[0],
dp[max(0,i-7)] + costs[1],
dp[max(0,i-30)] + costs[2]
});
}
return dp[day];
}
};