A&B&C&D 1000+1200+1400+1700
水,但是附上C的奇妙代码
cout<<min(op,ol*(xp+1))+min(xp,xl*(op+1))<<'\n';
E 400->1900
搜索,正解是meet-in-the-middle
//dfs1用于搜索前半部分并储存答案
//dfs2用于搜索后半部分计算答案
signed main(){
cin.tie(0);cout.tie(0);
cin>>n;pw[0]=1;
for(int i=1;i<=15;i++) pw[i]=pw[i-1]*10ll;
for(int i=1;i<=n;i++){cin>>str[i];str[i]=" "+str[i];}
for(int i=1;i<=n;i++) cin>>c[i];
k=str[1].size()-1;m=(k+1)/2;
dfs(1,0);dfs2(1,0);
if(!ans) cout<<"no answer";
else if(ans>1) cout<<"many answer";
else{print(ans1,m);print(ans2,k-m);}
return 0;
}
F 525->2100
米奇妙妙二分图,建边:
for(int i=1;i<=m;i++){
cin>>a>>b>>c>>d;
if(a==1){
for(int k=d+1;k<=n;k++)
for(int j=b;j<=c;j++)
ch[k][j]=0;
}else{
for(int k=1;k<d;k++)
for(int j=b;j<=c;j++)
ch[k][j]=0;
}
for(int j=1;j<b;j++)
ch[d][j]=0;
for(int j=c+1;j<=n;j++)
ch[d][j]=0;
}
G&H 0+0
orz