1049 尼克的任务
题目链接
状态设置
一个精髓的思想:题目问什么,状态就设什么。
题目问最大空余时间。我们就设置
f [ i ] f[i] f[i] 表示 第 i i i分钟结束后的获得的最大空闲时间。
#include<cstdio>
#include<iostream>
#include<algorithm>
#define N 100010
using namespace std;
int n,k,f[N],s[N],p[N],t[N];
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=k;i++)
{
scanf("%d%d",&p[i],&t[i]);
s[p[i]]++; //统计当前时刻有多少个任务
}
for(int i=n;i>=1;i--) //逆推
{
if(s[i]==0) f[i]=f[i+1]+1; //当前无任务
else
{
for(int j=1;j<=k;j++)
{
if(p[j]==i) //当前任务在i时刻开始的,选择做哪一个任务
f[i]=max(f[i],f[i+t[j]]);
}
}
}
cout<<f[1]<<endl;
}
给个赞?