http://poj.org/problem?id=3624

来源:互联网 发布:员工管理系统java和sql 编辑:程序博客网 时间:2024/06/05 02:12
//题意:Bessie他想在charm bracelet上添加charms,每个charms有一个重量和一个法力值,并且每一种charm有且仅有一个。//由于Bessie所能承受的重量有限,所以不能无限的添加charms,在规定的重量范围内,如何将获取最大的法力值。//思路:这是一道01背包的题目,包的容量为M(即:最大所能承受的重量)。//状态转移方程为:dp[j]=max(dp[j],dp[j-weight[k]]+rank[k]);#include<stdio.h>#include<string.h>int dp[13000];int weight[3500];int rank[3500];int max(int a,int b){    return a>b?a:b;}int main(){    int m,n;    int tem1,tem2;    int sum;    while(scanf("%d%d",&n,&m)!=EOF)    {        sum=0;        for(int i=0; i<n; i++)        {            scanf("%d%d",&tem1,&tem2);            if(tem1<=m)            {                weight[sum]=tem1;                rank[sum++]=tem2;            }        }        for(int k=0;k<sum;k++)         for(int j=m;j>=weight[k];j--)           dp[j]=max(dp[j],dp[j-weight[k]]+rank[k]);        printf("%d\n",dp[m]);    }    return 0;}

原创粉丝点击