糖果问题,为甚麽输出是-1不是2,前面的这段代码错误在哪里?后一个我搜到的可以正确输出,我找不出第一个的错误原因请帮忙看看
#include<bits/stdc++.h>
using namespace std;
//M 种口味 K 颗一包 给定 N 包糖果
int a[101]={0},f[1<<20];
int main()
{
int n,m,k;
cin>>n>>m>>k;
//scanf("%d%d%d",&n,&m,&k);
for(int i=0;i<n;i++)
{
for(int j=0;j<k;j++)
{
int t;
cin>>t;
//scanf("%d",t[i][j]);
a[i]=a[i]|(1<<(t-1));
}
}
//memset(f,sizeof(f),-1);
for(int i=1;i<(1<<m);i++)
f[i]=-1;
f[0]=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<(1<<m);j++)
{
if(f[j]==-1) continue;
f[j|a[i]]= (f[j|a[i]]<f[j]+1)? f[j|a[i]] : f[j]+1;
}
}
// printf("%d",f[1<<m-1]);
cout<<f[(1<<m)-1];
return 0;
}
#include <stdio.h>
#include <string.h>
int f[1<<20],a[105]={0};
int main()
{
int n,m,k;
scanf("%d%d%d",&n,&m,&k);
int num=(1<<m); // m种口味的各种组合总的状态数
int i,j;
for (i=0;i<num;i++)
{
f[i]=105;
}
for (i = 0;i<n;i++)
{
for (j = 0;j<k;j++)
{
int t;
scanf("%d",&t);
a[i] = a[i]|(1<<(t-1));
}
}
f[0]=0;
for (i=0;i<n;i++)
for (j=0;j<1<<m;j++)
{
if (f[j]>100) continue;
f[j|a[i]]= (f[j|a[i]]<f[j]+1)? f[j|a[i]] : f[j]+1;
}
if (f[num - 1]==105) printf("-1");
else printf("%d",f[num - 1]);
return 0;
}