P2089 烤鸡

P2089 烤鸡

题解

     显然这道题可以用DFS做

 

 

注意

我出现的问题真是太low了

(1)DFS要return啊要return啊,不然它不就卡在那个循环里出不来了嘛!!

(2)要判断无解啊!!不仅是一开始的美味值过大,还有美味值超了但是调料没加完,调料加完了美味值不够

(3)先存res==0&&k==11的合法答案啊,不合法再return啊,不然一个 || 判断直接就无解了

 

 

 代码

#include<bits/stdc++.h>

using namespace std;

int n,num;
int kaoji[11][4],ans[10010][11],a[11];
bool vis[11][4];

void dfs(int res,int k)
{
    
    if(res==0&&k==11)
    {
        num++;
        for(int i=1;i<=10;i++)
          ans[num][i]=a[i];
        
        return ;
    }
    if(res==0) return ;
if(k==11) return ;

for(int i=1;i<=3;i++) { if(!vis[k][i]) { res-=kaoji[k][i]; vis[k][i]=1; a[k]=kaoji[k][i]; dfs(res,k+1); res+=kaoji[k][i]; vis[k][i]=0; a[k]=0; } } } int main() { scanf("%d",&n); if(n>30||n<0) { printf("0\n"); return 0; } for(int i=1;i<=10;i++) for(int j=1;j<=3;j++) kaoji[i][j]=j; dfs(n,1); printf("%d\n",num); for(int i=1;i<=num;i++) { for(int j=1;j<=10;j++) printf("%d ",ans[i][j]); printf("\n"); } }

 

posted @ 2019-06-14 09:23  晔子  阅读(552)  评论(0编辑  收藏  举报