Milking Time - POJ 3616 - Virtual Judge
状态:截至第i次挤能获得多少牛奶
决策:第j次牛奶挤不挤
转移:如果下一次开始的时间大于这一次结束的时间:如果不挤,dp[i]=a[i].c
如果挤,dp[i]=dp[j]+a[i].c
如果下一次开始的时间小于这次结束的时间:continue
AC代码:
#pragma GCC optimize(2) #pragma GCC optimize(3) //#pragma GCC optimize("Ofast") #include <iostream> #include <queue> #include <cstdio> #include <cstdlib> #include <algorithm> #include <cmath> #include <cstring> #include <string> #include <map> #include <vector> #include <set> #include <stack> #include <numeric> #include <iomanip> #define lowbit(x) ((x) & -(x)) using namespace std; const int INF = 0x3f3f3f3f; const int mod = 1000000007; struct node { int s, e, c; bool operator <(const node &a) const { return s < a.s; } }; void solve() { int n, m, r; cin >> n >> m >> r; vector<node> a(m + 10); vector<int> dp(1010, 0); for (int i = 1; i <= m; i++) { cin >> a[i].s >> a[i].e >> a[i].c; a[i].e += r; } sort(a.begin() + 1, a.begin() + 1 + m); for (int i = 1; i <= m; i++) { dp[i] = a[i].c; for (int j = 1; j < i; j++) { if (a[j].e <= a[i].s) { dp[i] = max(dp[i], dp[j] + a[i].c); } } } int ans = 0; ans = dp[1]; for (int i = 2; i <= m; i++) { ans = max(ans, dp[i]); } cout << ans << endl; return; } int main() { ios::sync_with_stdio(false); //cin.tie(nullptr); int _t = 1; //cin >> _t; while (_t--) { solve(); } return 0; } /* */
Milking Time(DP)
最新推荐文章于 2024-05-19 17:14:16 发布