P1280 尼克的任务(逆序更新)

 

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 #define int long long
 4 const int maxn = 1e4 + 10;
 5 int n,k,b[maxn],dp[maxn];
 6 struct node{
 7     int p,t;
 8 }a[maxn];
 9 bool cmp(node b,node c){
10     if(b.p != c.p)
11         return b.p > c.p;
12     return b.t > c.t;
13 }
14 signed main(){
15     //freopen("in","r",stdin);
16     ios::sync_with_stdio(0);
17     cin >> n >> k;
18     for(int i = 1; i <= k; i++)
19         cin >> a[i].p >> a[i].t,b[a[i].p]++;
20     sort(a + 1, a + 1 + k,cmp);
21     int cnt = 1;
22     for(int i = n; i >= 1; i--){
23         if(!b[i])
24             dp[i] = dp[i + 1] + 1;
25         else{
26             for(int j = 1; j <= b[i]; j++){
27                 dp[i] = max(dp[i],dp[i + a[cnt++].t]);
28             }
29         }
30     }
31     cout << dp[1] << endl;
32     return 0;
33 }
View Code

猜你喜欢

转载自www.cnblogs.com/xcfxcf/p/12807169.html
今日推荐