状压DP样例没过求神犇查错
  • 板块P1278 单词游戏
  • 楼主cbkxx
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/23 22:49
  • 上次更新2023/11/24 13:39:27
查看原帖
状压DP样例没过求神犇查错
705343
cbkxx楼主2023/11/23 22:49
#include<bits/stdc++.h>
using namespace std;
int dp[65545][8],n,maxn,lg[65545];
string s[20],y="#AEIOU";
int fs(char c){
	if(c=='A')return 1;
	if(c=='E')return 2;
	if(c=='I')return 3;
	if(c=='O')return 4;
	if(c=='U')return 5;
	return 0;
}
int main(){
	int ss=1;
	for(int i=1;i<=16;i++){
		lg[ss]=1;
		ss*=2;
	}
	cin>>n;
	for(int i=1;i<=n;i++)cin>>s[i];
	for(int i=1;i<(1<<n);i++){
		bool flag=0;
		if(lg[i]==1)flag=1;
		for(int j=1;j<=5;j++){
			for(int k=1;k<=n;k++){//过去 
				char c=s[k][s[k].size()-1];
				if(((1<<(k-1))&i)&&c==y[j]){
					for(int l=1;l<=n;l++){//现在 
						if(k==l&&flag==0)break;
						if((1<<(l-1))&i){
							char d=s[l][0];
							if(d==c||flag)dp[i][j]=max(dp[i][j],dp[i-(1<<(l-1))][fs(d)]+int(s[l].size()));
							cout<<i<<" "<<j<<" "<<k<<" "<<l<<" "<<dp[i][j]<<" "<<d<<" "<<endl;
							maxn=max(maxn,dp[i][j]);
						}
					}
				}
			}
		}
	}
	cout<<maxn;
	return 0;
}
2023/11/23 22:49
加载中...