题目:http://acm.nyist.net/JudgeOnline/problem.php?pid=311

分析:这里就是一个完全背包,需要注意的就是初始化和最后的输出情况
       dp[j]=max{ dp[j],dp[j-c[i]]+w[i] }

#include<stdio.h>

const int INF=0XFFFFFF;
int main()
{
  int N,M,V,c[2010],w[2010],dp[50000];
  scanf("%d",&N);
  while (N--)
  {
    //读取数据
    scanf("%d%d",&M,&V);
    for(int i=1;i<=M;i++)
      scanf("%d%d",&c[i],&w[i]);
    //数据初始化
    for(int i=0;i<=V;i++)
      dp[i]=-INF;
    dp[0]=0;
    //利用递推关系
    for(int i=1;i<=M;i++)
      for(int j=c[i];j<=V;j++)
       dp[j]=dp[j]>dp[j-c[i]]+w[i]?dp[j]:dp[j-c[i]]+w[i];
    //输出。这里是要求背包装满
    if(dp[V]<0)
      printf("NO\n");
    else
      printf("%d\n",dp[V]);
  }
  return 0;
}

《背包九讲》里面有关于初始化的问题。






相关文章:

  • 2021-04-15
  • 2022-01-04
  • 2021-06-01
  • 2021-05-10
猜你喜欢
  • 2021-10-28
  • 2022-12-23
  • 2021-11-22
  • 2021-09-30
  • 2022-12-23
  • 2021-08-17
  • 2022-12-23
相关资源
相似解决方案