제출 #67302

#제출 시각아이디문제언어결과실행 시간메모리
67302theknife2001휴가 (IOI14_holiday)C++17
0 / 100
5019 ms1508 KiB
//#include"holiday.h" //#include <bits/stdc++.h> // //using namespace std; //const int N=3055; //long long dp[N][N*3]; //int last[N][N*3]; //int a[N]; //int n; // //long long bt(int i , int d , int val) //{ // if(d<=0) // return 0; // if(dp[i][d]!=-1) // return dp[i][d]; // if(d==1) // { // dp[i][d]=a[i]; // last[i][d]=i; // return dp[i][d]; // } // long long ret=0; // if(i+val<n&&i+val>=0) // { // ret=max(bt(i+val,d-1,val),ret); // if(ret>bt(i+val,d-2,val)+a[i]) // { // ret=max(bt(i+val,d-2,val)+a[i],ret); // last[i][d]=last[i+val][d-2]; // } // else // last[i][d]=last[i+val][d-1]; // } // dp[i][d]=ret; // return ret; //} // // //long long int findMaxAttraction(int m, int start, int d, int ar[]) //{ // memset(dp,-1,sizeof dp); // n=m; // for(int i=0;i<n;i++) // a[i]=ar[i]; // long long ret=0; // for(int i=d;i>=0;i--) // { // ret=max(bt(start-1,i,-1)+bt(start,d-(start-last[start][i])-i,+1),ret); // } // return ret; //} // //int main() { // int n, start, d; // int attraction[100000]; // int i, n_s; // n_s = scanf("%d %d %d", &n, &start, &d); // for (i = 0 ; i < n; ++i) { // n_s = scanf("%d", &attraction[i]); // } // printf("%lld\n", findMaxAttraction(n, start, d, attraction)); // return 0; //} #include"holiday.h" #include <bits/stdc++.h> using namespace std; priority_queue < int , vector < int > , greater < int > > pq; const int N=3055; long long int findMaxAttraction(int n, int start, int d, int a[]) { if(!d) return 0; int x; long long ret=0; for(int j=0;j<=d;j++) { long long ans=0; int last=start; pq.push(a[start]); ans+=a[start]; int y=j; y--; x=y/2; for(int i=start+1;i<=x+start&&i<n;i++) { pq.push(a[i]); ans+=a[i]; last=i; } bool q=y%2; long long best=ans; for(int i=x+1+start;i<n&&pq.size();i++) { if(!q) { ans-=pq.top(); pq.pop(); } else q=0; if(pq.size()&&a[i]>pq.top()) { ans+=a[i]-pq.top(); pq.pop(); if(ans>best) { best=ans; last=i; } pq.push(a[i]); } } while(pq.size()) pq.pop(); y=d-(last-start)-j; if(y==0) x=0; else x=y/2; ans=0; for(int i=start-1;i>=0&&i>start-x-1;i--) { if(y<=0) break ; pq.push(a[i]); ans+=a[i]; } long long best1=ans; q=y%2; for(int i=start-x-1;i>=0;i--) { if(y<=0) break ; if(!q) { ans-=pq.top(); pq.pop(); } else q=0; if(pq.size()&&a[i]>pq.top()) { ans+=a[i]-pq.top(); pq.pop(); if(ans>best1) { best1=ans; } pq.push(a[i]); } } ret=max(best+best1,ret); // cout<<best<<' '<<best1<<' '<<j<<endl; while(pq.size()) pq.pop(); } return ret; } //int main() { // int n, start, d; // int attraction[100000]; // int i, n_s; // n_s = scanf("%d %d %d", &n, &start, &d); // for (i = 0 ; i < n; ++i) { // n_s = scanf("%d", &attraction[i]); // } // printf("%lld\n", findMaxAttraction(n, start, d, attraction)); // return 0; //}

컴파일 시 표준 에러 (stderr) 메시지

grader.cpp: In function 'int main()':
grader.cpp:7:12: warning: variable 'n_s' set but not used [-Wunused-but-set-variable]
     int i, n_s;
            ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...