P1280 尼克的任务(dp,普及+/提高)

题目:

在这里插入图片描述

分析:被区间问题限制思维了。

f(i)表示从i时刻开始的最大空暇时间。
有i时刻开始的:f(i)=max(f(i),f(i+t))

无i时刻开始的:f(i)=f(i+1)+1

用一个二维的vector存储。

代码:

#include<bits/stdc++.h>
using namespace std;
vector<vector<int> > vv;
int main()
{
 int m,n;
 cin>>m>>n;
 vector<int> v;
 for(int i=0;i<=m+1;i++) vv.push_back(v);
 for(int i=0;i<n;i++)
 {
  int a1,a2;
  cin>>a1>>a2;
  vv[a1].push_back(a2);
 }
 int A[m+2];
 A[m+1]=0;
 for(int i=m;i>=0;i--)
 {
  A[i]=-1;
  if(vv[i].size()==0) A[i]=A[i+1]+1;
  for(int j=0;j<vv[i].size();j++) A[i]=max(A[i],A[i+vv[i][j]]);
 }
 cout<<A[1];
}

猜你喜欢

转载自blog.csdn.net/weixin_42721412/article/details/107543585