題目地址c++
給n個物品的體積和揹包的總容量,問能裝下的方案數。spa
codecode
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N=32; int n; ll w,v[N],mn[N],suf[N]; ll dfs(int idx,ll rem){ if(rem<mn[idx]){ return 1; } if(rem>=suf[idx]){ return 1ll<<n-idx+1; } if(idx==n){ if(rem>=v[idx]){ return 2; }else{ return 1; } } ll ans=0; if(rem>=v[idx]){ ans+=dfs(idx+1,rem-v[idx]); } ans+=dfs(idx+1,rem); return ans; } int main(){ scanf("%d%lld",&n,&w); for(int i=1;i<=n;i++){ scanf("%lld",&v[i]); } mn[n+1]=0x3f3f3f3f; for(int i=n;i>=1;i--){ mn[i]=min(mn[i+1],v[i]); suf[i]=suf[i+1]+v[i]; } ll ans=dfs(1,w); printf("%lld\n",ans); return 0; }