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