国内最全IT社区平台 联系我们 | 收藏本站
华晨云阿里云优惠2
您当前位置:首页 > php开源 > php教程 > POJ 3624 Charm Bracelet【01背包入门题】

POJ 3624 Charm Bracelet【01背包入门题】

来源:程序员人生   发布时间:2016-12-13 15:10:50 阅读次数:2304次

Charm Bracelet
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 34333   Accepted: 15215

Description

Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to fill it with the best charms possible from the N (1 ≤ N ≤ 3,402) available charms. Each charm i in the supplied list has a weight Wi (1 ≤ Wi≤ 400), a 'desirability' factor Di (1 ≤ Di ≤ 100), and can be used at most once. Bessie can only support a charm bracelet whose weight is no more than M (1 ≤ M ≤ 12,880).

Given that weight limit as a constraint and a list of the charms with their weights and desirability rating, deduce the maximum possible sum of ratings.

Input

* Line 1: Two space-separated integers: N and M
* Lines 2..N+1: Line i+1 describes charm i with two space-separated integers: Wi and Di

Output

* Line 1: A single integer that is the greatest sum of charm desirabilities that can be achieved given the weight constraints

Sample Input

4 6 1 4 2 6 3 12 2 7

Sample Output

23

Source

USACO 2007 December Silver

原题链接:http://poj.org/problem?id=3624


01背包入门题,不解释。

#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn=12880+5; int v[maxn]; int w[maxn]; int dp[maxn]; int main() { int n,m; ios::sync_with_stdio(false); cin.tie(0); //freopen("data/3624.txt","r",stdin); while(cin>>n>>m) { for(int i=0; i<n; i++) cin>>w[i]>>v[i]; memset(dp,0,sizeof(dp)); for(int i=0; i<n; i++) { for(int j=m; j>=w[i]; j--) { dp[j]=max(dp[j],dp[j-w[i]]+v[i]); } } cout<<dp[m]<<endl; } return 0; }



生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------
关闭
程序员人生