玩具

n种玩具,m元,不能连续两个周买

n<=1000 m<=1000000

写g这个辅助背包

#include<bits/stdc++.h>
using namespace std;
int f[2][1000001],a[1001],n,m;bool g[2][1000001];
int main() 
{
  cin>>n>>m;
  for(int i=1;i<=n;i++)
  {
    cin>>a[i];
  }
  int jii=0;
  for(int i=1;i<=n;i++)
  {
    for(int j=1;j<=m;j++)
    {
      if(j>=a[i]&&f[0][j-a[i]]+1>f[0][j]&&g[0][j-a[i]]==0)
      {
        g[1][j]=1;f[1][j]=f[0][j-a[i]]+1;
      }  
      else
      {
        f[1][j]=f[0][j];
        g[1][j]=0;
      }
    }
    for(int j=1;j<=m;j++)
    {
      f[0][j]=f[1][j];
      g[0][j]=g[1][j];
    }
  }
  cout<<f[0][m];
}

猜你喜欢

转载自www.cnblogs.com/fanhao050109/p/10895902.html