結果
問題 | No.2167 Fibonacci Knapsack |
ユーザー |
![]() |
提出日時 | 2022-12-19 08:30:50 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,523 bytes |
コンパイル時間 | 2,239 ms |
コンパイル使用メモリ | 207,428 KB |
最終ジャッジ日時 | 2025-02-09 16:39:25 |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 WA * 1 |
other | WA * 21 |
ソースコード
#pragma optimize("Ofast")#pragma target("avx2")#include<bits/stdc++.h>using namespace std;using lint = long long;#define rep(i,a,b) for(int i=(a);i<(b);++i)#define endl '\n'int main(){cin.tie(0)->sync_with_stdio(0);int t;cin>>t;while(t--){lint n,w;cin>>n>>w;vector<lint>a(n),b(n+1);rep(i,0,n)cin>>a[i];rep(i,0,n)b[i+1]=b[i]+a[i];vector<lint>f(n);f[0]=1;if(n>=2)f[1]=2;rep(i,2,n)f[i]=f[i-1]+f[i-2];map<lint,lint>dp,dp1;lint ans=0;dp[w]=0;for(lint i=n-1;i>=0;i--){map<lint,lint>dp2;for(auto [e,c]:dp){if(i!=0&&e-a[i]-a[i-1]>=0){dp2[e-a[i]-a[i-1]]=max(dp2[e-a[i]-a[i-1]],c+f[i]+f[i-1]);ans=max(ans,c+f[i]+f[i-1]);}else{bool ok=0;if(i!=0&&e-a[i-1]>=0){ok=1;ans=max(ans,c+f[i-1]);dp2[e-a[i-1]]=max(dp2[e-a[i-1]],c+f[i-1]);}if(e-a[i]>=0){ok=1;ans=max(ans,c+f[i]);dp1[e-a[i]]=max(dp1[e-a[i]],c+f[i]);}if(ok==0){dp2[e]=max(dp2[e],c);}}}swap(dp,dp1);swap(dp1,dp2);}cout<<ans<<endl;}}