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];
}