习题: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;
}

浙公网安备 33010602011771号