[解説]音楽祭(フェンウィックツリーの最適化DP)

[解説]音楽祭(フェンウィックツリーの最適化DP)

ジム - 101908F

質問の意味:そこ\(N \)プログラムの種類、各プログラムは、開始時間と終了時間と量を有しています。今の場合、唯一のショー(ない境界線を)見るためには、少なくとも一度は最大の利益のすべての種類を見てきました

セット\(DP(S、i)は \) それは見ていたと述べた\(S \)収集プログラムでは、プログラムの終了時間がされて見ていると(私は\)\最大の利益の。

転送:
.val [DP(S、E .R [T])= \ MAX(DP(S、K)、DP(SE [T]が.ID、K))+ E [T]、K \ Eル\ [t]は.L \]
ので\(O(M ^ 3) \) 1000を超えることができない、転送接頭辞、そうのような直接最適化フェンウィックツリーたことが分かります。

転送の順序は、に見出すことができることに留意されたい\(R&LTの\)転送状態として使用することができます。Rは、同じような状況かもしれませんが、答えには影響しません。

複雑\(O(M ^ 2 \ログメートル)\)

//@winlere
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>

using namespace std;  typedef long long ll; 
inline int qr(){
      register int ret=0,f=0;
      register char c=getchar();
      while(!isdigit(c))f|=c==45,c=getchar();
      while(isdigit(c)) ret=ret*10+c-48,c=getchar();
      return f?-ret:ret;
}
const int maxn=86405;
const int inf=0x3f3f3f3f;
int dp[1<<10|1][maxn];

struct E{
      int l,r,id,val;
      inline bool operator <(const E&a)const{return r<a.r;}
}e[1001];
int n,cnt,len;
inline int que(const int&pos,const int*a){
      int ret=-inf;
      for(int t=pos;t>0;t-=t&-t) ret=max(ret,a[t]);
      return ret;
}

inline void upd(const int&pos,const int&tag,int*a){
      for(int t=pos;t<=len;t+=t&-t) a[t]=max(a[t],tag);
}

int main(){
#ifndef ONLINE_JUDGE
      freopen("in.in","r",stdin);
      //freopen("out.out","w",stdout);
#endif
      n=qr();
      memset(dp,0xcc,sizeof dp);
      for(int t=1;t<=n;++t){
        int m=qr();
        for(int i=1,t1,t2,t3;i<=m;++i) t1=qr(),t2=qr(),t3=qr(),e[++cnt]={t1,t2,t,t3};
      }
      sort(e+1,e+cnt+1);
      len=e[cnt].r+1;
      memset(dp[0],0,sizeof dp[0]);
      for(int t=1;t<=cnt;++t){
        for(int s=0;s<1<<n;++s){
          if(s&(1<<e[t].id>>1)){
            int g=s^(1<<e[t].id>>1);
            int f=max(que(e[t].l,dp[s]),que(e[t].l,dp[g]))+e[t].val;
            upd(e[t].r,f,dp[s]);
          }
        }
      }
      int g=que(len,dp[(1<<n)-1]);
      cout<<max(g,-1)<<endl;
      return 0;
}

おすすめ

転載: www.cnblogs.com/winlere/p/11725245.html
おすすめ