P5118 [USACO18DEC] Back and Forth B

>>>a[11] b[11] 有可能已经有值了

 

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<bits/stdc++.h>
#define ll long long
#define ddd printf("--------------debug\n");
using namespace std;

int a[30],pd[30];
set<int> st;
/*void dfs(int peng,int num)
{
    if(num==5)
    {
        //ddd
        int sum=0;
        for(int i=1;i<=11;i++) sum+=a[i];
        st.insert(sum);
    //    cout<<sum<<endl;
        return;
    }
    if(peng%2==1)
    {
        for(int i=1;i<=11;i++)
        {
            if(a[i]!=0)
            {
                int tmp=a[i];
                b[11]=a[i]; a[i]=0; dfs(2,num+1); a[i]=tmp;
            }
        }
    }
    else
    {
        for(int i=1;i<=11;i++)
        {
            if(b[i]!=0)
            {
                int tmp=b[i];
                a[11]=b[i]; b[i]=0; dfs(1,num+1); b[i]=tmp;
            }
        }    
    }
}
*/
void dfs(int day)
{
    if(day==6)
    {
        
        int sum=0;
        for(int i=1;i<=20;i++)
        {
            if(pd[i]==1) sum+=a[i];
        }
        st.insert(sum);
        return;
    }
    if(day%2==0)
    {
        for(int i=1;i<=20;i++)
        {
            if(pd[i]==1)
            {
                pd[i]=2;
                dfs(day+1);
                pd[i]=1;
            }
        }
    }
    else 
    {
        for(int i=1;i<=20;i++)
        {
            if(pd[i]==2)
            {
                pd[i]=1;
                dfs(day+1);
                pd[i]=2;
            }
        }
    }
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);
    for(int i=1;i<=20;i++) cin>>a[i],pd[i]=(i<=10? 1:2);
//    for(int i=1;i<=10;i++) cin>>b[i];
    //for(int i=1;i<=20;i++) cout<<a[i]<<pd[i]<<endl;;
    
    dfs(2);
    cout<<st.size()<<'\n';

    return 0;
}
View Code
 

 

 
posted @ 2023-07-25 08:57  JMXZ  阅读(7)  评论(0)    收藏  举报