首页 > 其他分享 >POJ--3616 Milking Time(DP)

POJ--3616 Milking Time(DP)

时间:2024-01-26 20:34:59浏览次数:33  
标签:begin 3616 -- rhs int POJ lhs include dp

记录
19:52 2024-1-26

http://poj.org/problem?id=3616

reference:《挑战程序设计竞赛(第2版)》第二章练习题索引 p135

一个LIS(最长上升子序列, Longest Increasing Subsequence)问题的变种
dp[i]表示第i个interval结尾能获得最多的milk,首先需要把数据按照起始时间排序,第i个表示以这个工作结尾可以获得的最大的milk,那么公式就为
dp[i]=max(dp[i],dp[j]+a[i].c)(a[j].e+r<=a[i].s,j<i)

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define MAX_N 1000
#define MAX_M 1000
typedef long long ll;
typedef unsigned int uint;
const int INF = 0x3f3f3f3f;

int N, M, R;
typedef struct {
    int begin, end;
    int value;
} t;
t datas[MAX_N];

bool cmp(const t& lhs, const t& rhs) {
    return lhs.begin < rhs.begin || (lhs.begin == rhs.begin && lhs.end < rhs.end);
}
int dp[MAX_M]; //LIS(Longest Increasing Subsequence)变式 dp1[i]表示第i个interval结尾能获得最多的milk
// dp[i]=max(dp[i],dp[j]+a[i].c)(a[j].e+r<=a[i].s,j<i)

void solve() {
    sort(datas + 1, datas + M + 1, cmp);
    for(int i = 1; i <=M; i++) {
        dp[i] = datas[i].value;
        for(int j = 1; j < i; j++) {
            if(datas[j].end + R < datas[i].begin) {
                dp[i] = max(dp[i], dp[j] + datas[i].value);
            }
        }
    }
    int result = -1;
    for(int i = 1; i <= M; i++) {
        if(result <= dp[i]) {
            result = dp[i];
        }
    }
    printf("%d\n", result);
}

int main() {
    scanf("%d%d%d", &N, &M, &R);
    t temp;
    for(int i = 1; i <= M; i++) {
        scanf("%d%d%d", &(temp.begin), &(temp.end), &(temp.value));
        // printf("%d %d %d\n", temp.begin, temp.end, temp.value);
        datas[i] = temp;
    }
    solve();    
}

标签:begin,3616,--,rhs,int,POJ,lhs,include,dp
From: https://www.cnblogs.com/57one/p/17990627

相关文章

  • java IO
    I/O流什么事文件文件就是保存数据的地方文件流文件在程序中是以流的方式来操作的流:数据在数据源(文件)和程序(内存之间)经历的路径输入流:数据从数据源(文件)到程序(内存)的路径输出流:数据从程序(内存)到数据源文件的路径1.常用创建文件的操作创建文件对象相关的......
  • 安卓家庭记账本开发笔记2
    开发进度:完成app首页的每条支出的流水信息的绘制以及首页记录每月收入和支出总和的表头的绘制代码:1.流水信息的代码:<?xmlversion="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_widt......
  • 算法题总结
    1、接雨水Leetcode给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示的高度图,在这种情况下,可以接6个单位的雨水(蓝色部分表示......
  • Error: EPERM: operation not permitted, mkdir 'F:\'——因权限不够报错
      我的报错内容如上图在网上找了很多解决办法,如下:下面的方案我都试过了,最终是成功了方案一:以管理员身份运行 方案二:重新配置环境变量将npm安装的全局模块所在的路径,以及缓存cache的路径放在其他目录中【试了,再执行方案一成功了】因为我没有截图,把我搜到的解决方法链......
  • ZSH!在 Windows 上使用 WSL+ZSH
    ZSH!在Windows上使用WSL+ZSH1.安装WSL关于如何安装WSL这里就不介绍了,大家可以去找找相关的教程,很多。最直接的就是去微软官方:https://learn.microsoft.com/en-us/windows/wsl/install最简单的方法是从MicrosoftStore安装Ubuntu2.ubuntu在开始菜单中搜索Ubuntu图标并打开终端......
  • 修复“Monty Hall”游戏模拟的错误输出
    最近公司在做模拟器开发,因为开发技术员都是新手,经常遇到很多逻辑上得错误。游戏ROM文件没有损坏或错误。有时候下载的ROM文件可能出现问题,导致模拟器无法正确加载。有些模拟器提供调试选项,可以帮助你识别和解决问题。但是大部分得问题还得要我们自己解决。例如下列得问题。问题......
  • php session反序列化
    关于SessionSession,在汉语中表示通话、会话、对话(期)、话路[对谈时间]的意思,其本来的含义一个终端用户与交互系统进行通信的时间(间隔),通常是指从注册(进入系统)到注销(退出系统)之间所经过的时间。比如打电话时从拿起电话拨号到挂断电话这中间的一系列过程可以称之为一个Session......
  • 【随笔】2024年1月1日
    关于Febonacci的一些事学了矩阵加速递推遂顺手给你谷的板子题又过了一遍对于“已知递推式求转移矩阵”的方法仍有疑惑与巨佬WPP交流并丢给WPP一道题请他口糊题:求Febonacci前n项的和(n<=1e18)正解是把S(n)(表示前n项的和)塞到矩阵里一起转移答案矩阵F(n)={f(n-1)f(n-2)S(n......
  • 【警钟撅烂】1
    警示后人定义结构体之后记得加分号!!!事件事故概述2024年1月1日17点52分记某人尝试速通Febonacci矩阵加速递推定义结构体后没加分号导致CE若至错误调试耗时15分钟PS:加上分号后无编译AC,当事人非常开心以上,引以为戒(附CE代码)#include<bits/stdc++.h>usingnamespacestd;......
  • Gradle下载安装与配置过程
    下载Gradle:镜像链接https://mirrors.cloud.tencent.com/gradle/,找到所需版本,这里下载gradle-8.2-all.zip,如不知道该下载哪个版本,请往下翻查看注部分。配置环境变量:解压到D盘,我这里解压目录为D:\Android\Gradle\gradle-8.2。添加该目录到系统环境变量,新建变量名为GR......