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

浙公网安备 33010602011771号