完全背包

有n种物品和容量为v的背包,每种物品可无限次使用,放入的费用是ci,价值是wi,求价值最大

#include<stdio.h>
#include<algorithm>
using namespace std;
const int maxn=1e3+6;
int n;
int c[maxn],w[maxn],dp[maxn];
//dp[i]表示i,体积为i的最大价值

//完全背包就地滚动
int main()
{
    int n,vi;
    scanf("%d%d",&n,&vi);
    for(int i=1;i<=n;i++)
        scanf("%d",&c[i]);

        for(int i=1;i<=n;i++)
      scanf("%d",&w[i]);
      int mmax=0;
      for(int i=1;i<=n;i++)
      {
          for(int j=c[i];j<=vi;j++)
          {
              dp[j]=max(dp[j],dp[j-c[i]]+w[i]);
              mmax=max(dp[j],mmax);
          }
      }
   printf("%d\n",mmax);

}

 

上一篇:vi/vim 编辑器使用详解


下一篇:【Linux】Ubuntu安装zsh并配置插件