01背包(回溯法)

题目:

一个农场养了一群蛋鸡,每只鸡的重量不同,每只鸡的月产蛋量也不同,先有一辆车,车的载重量为C,要拉走一群鸡,在车能装下的前提下,保证车内鸡的总月产蛋量最大。
输入:鸡的数量n,每只鸡的重量wi,每只鸡的月产蛋量vi,车的载重量C
输出:选择哪些鸡装入车中。


代码:

#include <bits/stdc++.h>

using namespace std;
const int MAXN=1010;
int n,c,bestv,cw,cv,w[MAXN],v[MAXN];
void dfs(int i)
{
    if(i>=n)
    {
        bestv=max(bestv,cv);
        return;
    }
    if(w[i]+cw<=c)
    {
        cw+=w[i];cv+=v[i];
        dfs(i+1);
        cw-=w[i];cv-=v[i];
    }
    dfs(i+1);
}
int main()
{
    cin>>n>>c;
    for(int i=0;i<n;i++) cin>>w[i];
    for(int i=0;i<n;i++) cin>>v[i];
    bestv=0;cw=0;cv=0;
    dfs(0);
    cout<<bestv<<endl;
    return 0;
}


测试数据:

intput:
5 10
2 2 6 5 4
6 3 5 4 6

output:
15

猜你喜欢

转载自blog.csdn.net/addkai/article/details/78366487