問題 C 工作(dp)

2021-10-05 10:22:47 字數 2033 閱讀 1822

題目描述

這次故事的主角是hg!轉眼4年過去了,hg本科畢業了,於是找了份工作。每天hg會收到乙份任務清單,清單上列出了n個可能需要他完成的任務。每個任務包含3個資訊:ti、ai、bi,ti表示完成此任務需要的時間,ai表示此任務的到達時間,bi表示此任務的最晚完成時間。在某一時刻若hg手上沒有任務,那麼他可以選擇乙個已經到達且還能夠在bi時刻之前(或者恰好在bi時刻)完成的任務來做。

由於hg有點懶(純屬虛構:d),他想盡量少的減少他的總工作時間,但是他不能在可以做任務的時候故意不做(這樣會被炒魷魚的》_<),那麼他該如何挑選任務來做呢?

你的任務就是求出hg的最少工作時間(即總共有多少時間hg在做任務)。

輸入 第一行乙個整數n表示任務數。

以下n行,每行三個整數ti,ai,bi。(n<=1000,0<=ai,bi<=1500,ti>=1)

輸出 輸出僅乙個數,即最少工作時間。

樣例輸入 copy

3

15 0 25

50 0 90

45 15 70

樣例輸出 copy

50

提示ti>=1,0<=ai,bi<=1200;

30%的資料滿足n<=5;

60%的資料滿足n<=500;

100%的資料滿足n<=1000。

輸入資料保證bi-ai要大於等於ti,且小於2ti。

思路:dp,起點時間開始到中點時間。dp[i+a[j]]=min(dp[i]+a[j],dp[i+a[j]]);

#pragma comment(linker, "/stack:1024000000,1024000000")

#pragma gcc optimize(3,"ofast","inline")

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define rep(i , a , b) for(register int i=(a);i<=(b);i++)

#define per(i , a , b) for(register int i=(a);i>=(b);i--)

#define ms(s) memset(s, 0, sizeof(s))

#define squ(x) x*x;

typedef long long ll;

typedef unsigned long long ull;

typedef pairpi;

typedef unordered_mapun_map;

templateinline void read (t &x)

while (c >= '0' && c <= '9')

x = x * sign;

}const int maxn = 1e6 + 10;

const int inf = 0x3f3f3f3f;

const ll inf = ll(1e18);

const int mod = 1e9+7;

const double pi = acos(-1);

#define local

struct node

e[maxn];

int n;

ll dp[maxn];

void solve()

rep(i,st,ed) dp[i]=inf;

dp[st]=0;

rep(i,st,ed) {

int f=0;

rep(j,1,n) {

if(i>=e[j].a&&i+e[j].t<=e[j].b) {

f=1;

dp[i+e[j].t]=min(dp[i]+e[j].t,dp[i+e[j].t]);

//cout<

裝箱問題 DP

裝箱問題 pack.pas c cpp 問題描述 有乙個箱子容量為v 正整數,0 v 20000 同時有n個物品 0 n 30 每個物品有乙個體積 正整數 要求n個物品中,任取若干個裝入箱內,使箱子的剩餘空間為最小。輸入檔案 第一 行乙個正整數v表示箱子的容量,第二行乙個正整數n表示物品個數,接下來...

經典DP問題

動態規劃5個經典問題解析 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子序中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和為20。數塔問題 要求從頂層走到底層,若每一步只能走到相鄰的結點,則經過的結點的數字之和最大是多少?include s...

DP 硬幣問題

動態規劃演算法通常基於乙個遞推公式及乙個或多個初始狀態。當前子問題的解將由上一次子問題的解推出。使用動態規劃來解題只需要多項式時間複雜度,因此它比回溯法 暴力法等要快許多。動態規劃也是面試筆試題中的乙個考查重點,當閱讀乙個題目並且開始嘗試解決它時,首先看一下它的限制。如果要求在多項式時間內解決,那麼...