试题描述
|
背包问题……典型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。
|
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#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]; }