暴搜过样例但0分,悬赏关注*1
查看原帖
暴搜过样例但0分,悬赏关注*1
823725
EZAIJ楼主2024/4/7 20:20

知道要用dp,但就想试试不加记忆化的dfs,不过全WA了,求改一下。```c #include<bits/stdc++.h> using namespace std;

#define N 110 #define M 25

int n,m,k,candy[N][M],eaten[M],ans=N;

int good(int num){ for(int i=1;i<=k;i++) if(!eaten[candy[num][i]]) return 1; return 0; }

void dfs(int num,int time,int sur){ if(!sur){ ans=min(ans,time); return; } if(num>n) return; if(good(num)){ int tmp=0,jici=0; for(int i=1;i<=k;i++) if(!eaten[candy[num][i]]){ tmp=tmp*10+candy[num][i],jici++; eaten[candy[num][i]]=1; } dfs(num+1,time+1,sur-jici); while(jici){ int t=tmp%10; eaten[t]=0; tmp/=10,jici--; } } dfs(num+1,time,sur); }

int main(){ cin>>n>>m>>k; for(int i=1;i<=n;i++) for(int j=1;j<=k;j++) cin>>candy[i][j]; dfs(0,0,m); cout<<ans; return 0; }

2024/4/7 20:20
加载中...