Advertisement
yicongli

CF864E

Jan 20th, 2021 (edited)
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define gc c=getchar()
  6. #define r(x) read(x)
  7. #define ll long long
  8.  
  9. template<typename T>
  10. inline void read(T&x){
  11.     x=0;T k=1;char gc;
  12.     while(!isdigit(c)){if(c=='-')k=-1;gc;}
  13.     while(isdigit(c)){x=x*10+c-'0';gc;}x*=k;
  14. }
  15.  
  16. const int N=105;
  17. const int M=2005;
  18.  
  19. struct Data{
  20.     int t,d,p,ID;
  21. }a[N];
  22.  
  23. inline bool cmp(const Data &a,const Data &b){
  24.     return a.d<b.d;
  25. }
  26.  
  27. int f[M];
  28. bool tag[M][N];
  29.  
  30. int main(){
  31.     // freopen(".in","r",stdin);
  32.     // freopen(".out","w",stdout);
  33.     int n;r(n);
  34.     for(int i=1;i<=n;++i){
  35.         r(a[i].t),r(a[i].d),r(a[i].p);
  36.         a[i].ID=i;
  37.     }
  38.     sort(a+1,a+1+n,cmp);
  39.     for(int i=1;i<=n;++i){
  40.         for(int j=a[i].d-1;j>=a[i].t;--j){
  41.             if(f[j]<f[j-a[i].t]+a[i].p){
  42.                 f[j]=f[j-a[i].t]+a[i].p;
  43.                 tag[j][i]=1;
  44.             }
  45.         }
  46.     }
  47.     int ans=1;
  48.     for(int i=2;i<=a[n].d;++i){
  49.         if(f[i]>f[ans])ans=i;
  50.     }
  51.     printf("%d\n",f[ans]);
  52.     vector<int>Ans;
  53.     for(int i=n;i;--i){
  54.         if(tag[ans][i]){
  55.             Ans.push_back(a[i].ID);
  56.             ans-=a[i].t;
  57.         }
  58.     }
  59.     printf("%d\n",int(Ans.size()));
  60.     for(int i=Ans.size()-1;~i;--i){
  61.         printf("%d ",Ans[i]);
  62.     }
  63.     return 0;
  64. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement