博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3616 Milking Time
阅读量:2125 次
发布时间:2019-04-30

本文共 1614 字,大约阅读时间需要 5 分钟。

题意

有一个奶牛,每次可以选择一个挤奶任务,完成任务之后需要休息R小时,现在一共有M个任务,问如何分配任务使得N小时内产奶量最大

AC

  • dp[ i ] 表示做这个任务的最大产量
    (每个dp都要有一个确定的状态)
    dp[ i ] = max(dp[ i ], dp[ j ] + c[ i ])
using namespace std;int dp[1003];struct task{    int s, e, w;};bool cmp(const task &x, const task &y) {    return x.s < y.s;}int main(){#ifndef ONLINE_JUDGE    freopen("in.txt", "r", stdin);#endif    int n, m, r;    cin >> n >> m >> r;    vector
a(m); for (int i = 0; i < m; ++i) { cin >> a[i].s >> a[i].e >> a[i].w; } sort(a.begin(), a.end(), cmp); int ans = -1; for (int i = 0; i < m; ++i) { dp[i] = a[i].w; for (int j = i - 1; j >= 0; --j) { if (a[j].e + r <= a[i].s) { dp[i] = max(dp[i], dp[j] + a[i].w); } } ans = max(ans, dp[i]); } cout << ans << endl; return 0;}
  • dp
    dp[ i ] 当前任务最大的情况,有选和不选当前任务两种情况
    dp[ i ] = max(dp[ i - 1], dp[ j ] + a[ i ])
using namespace std;int dp[1003];struct task{    int s, e, w;};bool cmp(const task &x, const task &y) {    return x.e < y.e;}int main(){#ifndef ONLINE_JUDGE    freopen("in.txt", "r", stdin);#endif    int n, m, r;    cin >> n >> m >> r;    vector
a(m); for (int i = 0; i < m; ++i) { cin >> a[i].s >> a[i].e >> a[i].w; } sort(a.begin(), a.end(), cmp); dp[0] = a[0].w; for (int i = 1; i < m; ++i) { dp[i] = a[i].w; for (int j = i - 1; j >= 0; --j) { if (a[j].e + r <= a[i].s) { dp[i] = max(dp[j] + a[i].w, dp[i]); break; } } dp[i] = max(dp[i - 1], dp[i]); } cout << dp[m - 1] << endl; return 0;}

转载地址:http://bkprf.baihongyu.com/

你可能感兴趣的文章
Oracle PL/SQL语言初级教程之过程和函数
查看>>
Oracle PL/SQL语言初级教程之表和视图
查看>>
Oracle PL/SQL语言初级教程之完整性约束
查看>>
PL/SQL学习笔记
查看>>
如何分析SQL语句
查看>>
结构化查询语言(SQL)原理
查看>>
SQL教程之嵌套SELECT语句
查看>>
几个简单的SQL例子
查看>>
日本語の記号の読み方
查看>>
计算机英语编程中一些单词
查看>>
JavaScript 经典例子
查看>>
判断数据的JS代码
查看>>
js按键事件说明
查看>>
AJAX 初次体验!推荐刚学看这个满好的!
查看>>
AJAX 设计制作 在公司弄的 非得要做出这个养的 真晕!
查看>>
AJAX 自己研究玩的
查看>>
javascript(js)数组操作
查看>>
用JavaScript脚本实现Web页面信息交互
查看>>
window 窗口对象操作
查看>>
公司一位老员工愤然离去的留信!崩溃!
查看>>