[USACO3.4]騒々しいロッカーズ - リュックサックDP

そこ\(N \) 2つの項目が次々と現れ、あなたはにターンプットでそれらを配置する必要があり、\(M \)パケット。最初の\(I \)品の外観の順序は、袋をインストールする必要があります\(I-1 \)後のパケット。アイテムはあきらめることができます。ボリュームを有する物品は、パッケージには、容量がある\(Tを\) アイテムの最大数をインストールすることができる求めています。\(N、M、T \当量20 \)

解決

セット\(F [I] [J ] [K] \) フォワード考え表す\(I \)番目の記事である第1プット\(J \)がインストールされているパッケージ、\(K \)ボリュームを最大の利益

転送は、新しいパッケージのためのより多くの配慮よりも何もない、意思決定は、この記事をインストールしていないふり

#include <bits/stdc++.h>
using namespace std;

int n,t,m,f[25][25][25],a[25];

signed main() {
    ios::sync_with_stdio(false);
    cin>>n>>t>>m;
    for(int i=1;i<=n;i++) cin>>a[i];
    int ans=0;
    for(int i=1;i<=n;i++) {
        for(int j=1;j<=m;j++) {
            for(int k=0;k<a[i];k++) f[i][j][k]=f[i-1][j][k];
            for(int k=a[i];k<=t;k++) {
                f[i][j][k]=max(f[i-1][j][k],max(f[i-1][j-1][t],f[i-1][j][k-a[i]])+1);
                ans=max(ans,f[i][j][k]);
            }
        }
    }
    cout<<ans;
}

おすすめ

転載: www.cnblogs.com/mollnn/p/12508724.html