习题:Knapsack(背包)

题目

传送门

思路

考虑直接一大堆一大堆的选

最后剩一些小的单独做背包

代码

#include<iostream>
using namespace std;
long long w;
long long ans;
long long cnt[10];
void dfs(long long dep,long long s)
{
    if(dep==9)
    {
        ans=max(ans,s);
        return;
    }
    for(long long k=7,i=min(cnt[dep],(w-s)/dep);k;i--,k--)
        dfs(dep+1,s+max(0ll,i*dep));
}
int main()
{ 
    cin>>w;
    for(int i=1;i<=8;i++)
        cin>>cnt[i];
    dfs(1,0);
    cout<<ans;
    return 0;
}
posted @ 2020-08-24 19:25  loney_s  阅读(96)  评论(0)    收藏  举报