PKU_3624(0-1背包)

题目:http://poj.org/problem?id=3624
分析:这是一个0-1背包的问题。

#include<stdio.h>
#include<string.h>
int main()
{
  int N,M,W[3500],D[3500],dp[20000];

  while (scanf("%d%d",&N,&M)!=EOF)
  {
    //输入数据
    for(int i=1;i<=N;i++)
      scanf("%d%d",&W[i],&D[i]);
    //数据初始化
    memset(dp,0,sizeof(dp));
    //利用递推方程推导
    for(int i=1;i<=N;i++)
      for(int j=M;j>=W[i];j--)
        dp[j]=dp[j]>dp[j-W[i]]+D[i]?dp[j]:dp[j-W[i]]+D[i];

    printf("%d ",dp[M]);
  }
  return 0;
}




原文地址:https://www.cnblogs.com/gt123/p/3455137.html