AtCoder Beginner Contest 166 F.Three Variables Game

AtCoder Beginner Contest 166 F.Three Variables Game

題目鏈接
在這裏插入圖片描述
這題一開始用的暴力,即每次判斷誰大就減誰,但其實是錯誤的,比如:

a=2 b=1 c=0
AB
AC
AC

用暴力的思想就不對,我看了 AC 的代碼都比較難懂,只有一個 DFS 的思路是挺清晰的,下面是代碼,就是逐層 DFS 得到最優解:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
string s[N];
char ans[N];
int n,a,b,c;
void dfs(int id,int a,int b,int c){
    if(a<0 || b<0 || c<0) return;
    if(id==n){
        puts("Yes");
        for(int i=0;i<n;i++) cout<<ans[i]<<endl;
        exit(0);
    }
    else{
        if(s[id]=="AB"){
            ans[id]='A';
            dfs(id+1,a+1,b-1,c);
            ans[id]='B';
            dfs(id+1,a-1,b+1,c);
        }
        else if(s[id]=="AC"){
            ans[id]='A';
            dfs(id+1,a+1,b,c-1);
            ans[id]='C';
            dfs(id+1,a-1,b,c+1);
        }
        else if(s[id]=="BC"){
            ans[id]='B';
            dfs(id+1,a,b+1,c-1);
            ans[id]='C';
            dfs(id+1,a,b-1,c+1);
        }
    }
}
main()
{
    cin>>n>>a>>b>>c;
    for(int i=0;i<n;i++) cin>>s[i];
    dfs(0,a,b,c);
    puts("No");
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章