0-1背包

试题描述

背包问题……典型0-1背包!题曰:今有n个物品,第i个体积为V[i],价值为W[i],背包的容积为C。求在体积不超容积的前提下,背包中可装物品价值的最大值。

输入
第一行:两个整数 n 和 C ; 第二行~第n+1行:每行两个整数Vi与Wi,有一个空格分隔。
输出
一个数,表示背包中能得到物品价值的最大值。 
输入示例
2 10 1 1 2 2
输出示例
3
其他说明
数据范围:1 <= n <= 100; 1<= Vi,Wi <= 100; 1 <= C <= 10000。

 

#include <iostream>
using namespace std;
int f[101][101],a[10010],b[10010],n,v;
int max(int x,int y)
{
    if(x>y)
        return x;
    else 
        return y;
}
int main()
{
    cin>>n>>v;
    for(int i=1;i<=n;i++)
        cin>>a[i]>>b[i];
    for(int i=1;i<=n;i++)
    {
        for(int j=a[i];j<=v;j++)
        {
            if(b[i]<v)
                f[i][j]=max(f[i-1][j],f[i-1][j-a[i]]+b[i]);
            else 
                f[i][j]=f[i-1][j];
        }
    }
    cout<<f[n][v];
} 
View Code

 

posted @ 2017-03-18 15:37  Dijkstra·Liu  阅读(192)  评论(0编辑  收藏  举报