一个手镯可承受最大重量M的装饰,有N个装饰品,第i个的重量为wi,价值为di,问最多手镯上能有多大价值的装饰品。
最基本的01背包问题。简单水之。不过以后要注意判断越界的情况。
#include <cstdio>
#include <iostream>
using namespace std ;
int val[13000] = {0} ;
int MAX(int x , int y) {
return (x > y)? x : y ;
}
int main() {
//freopen("in.txt" , "r" , stdin) ;
int N , M ;
cin >> N >> M ;
int w , d , v_max = 0 ;
for (int i = 1 ; i <= N ; i ++) {
cin >> w >> d ;
for (int v = M ; v >= 1 ; v --) {
if (v < w) continue ;
val[v] = MAX(val[v] , val[v - w] + d) ;
if (val[v] > v_max) v_max = val[v] ;
}
}
cout << v_max << endl ;
return 0 ;
}