1. 程式人生 > >題解 P1280 【尼克的任務】

題解 P1280 【尼克的任務】

pri -- 我們 num p12 AI class 記錄 include

f[i]表示i~n的最長空閑時間;

如果當前無任務就休息一秒(f[i]=f[i+1]+1);

否則f[i]=max(f[i],f[i+當前工作時間]);

用結構體來記錄,我們對於每一個時刻開一個數組來存以此時刻為起始點的所有任務,下標0來表示數組中的元素個數,便於遍歷:

#include<iostream>//簡短的30行代碼
#include<cstdio>
#include<algorithm>
#include<cstdio>
using namespace std;
int n,k,f[10010];
struct cym{
    int num[10010
]; }a[10010]; int main() { scanf("%d%d",&n,&k); for(int i=1;i<=k;i++) { int x,y; scanf("%d%d",&x,&y); a[x].num[++a[x].num[0]]=y; } for(int i=n;i>=0;i--) { if(!a[i].num[0]) { f[i]=f[i+1]+1; continue
; } for(int j=1;j<=a[i].num[0];j++) f[i]=max(f[i],f[i+a[i].num[j]]); } printf("%d",f[1]); }

題解 P1280 【尼克的任務】