尼克的任務 倒著dp
阿新 • • 發佈:2018-12-04
參考了大佬的程式碼,倒著dp,正向的思路想不起來。
#include <bits/stdc++.h> using namespace std; #define inf 0x3f3f3f3f const int maxn=1e4+5; struct Node{ int l,len; bool operator<(const Node x)const{ return this->l>x.l; } }node[maxn]; int dp[maxn]; int main() { memset(dp,inf,sizeof(dp)); int n,k; cin>>n>>k; int i,j,len; for(i=1;i<=k;i++) scanf("%d%d",&node[i].l,&node[i].len); sort(node+1,node+k+1); for(i=1;i<=k;i++){//然後開始迴圈,dp裡記錄的是之後的時間段裡所能夠選擇的最大的空暇時間 int l=node[i].l,len=node[i].len; for(j=l+len;inf==dp[j]&&j<=n;j++); if(inf==dp[j]) dp[l]=min(len,dp[l]); else dp[l]=min(dp[j]+len,dp[l]); } int cnt=0; for(i=1;i<=n&&inf==dp[i];i++); printf("%d",n-dp[i]); return 0; }