暴搜一下就行了,确实也没法优化什么。 不过枚举一半,另一半用next_permutation()函数应该是会快一些的。
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<cmath>
using namespace std;
int T,a[20],n,vis[20],tot;
int A[20],B;
void dfs(int cur) {
if(cur==n/2) {
int b[20],kase = 0;
for(int i=0;i<n;i++) {
if(!vis[i]) b[kase++] = a[i];
}
sort(b,b+kase);
do {
int t=0;
if(b[0]==0&&n-cur>1) continue;
for(int i=0;i<kase;i++)
t = t*10 + b[i];
int c = abs(t-B);
if(c<tot) tot = c;
} while(next_permutation(b,b+kase));
}
else for(int i=0;i<n;i++) {
if(cur==0&&a[i]==0) continue;
if(!vis[i]) {
B=B*10+a[i];
A[cur] = a[i];
vis[i] = 1;
dfs(cur+1);
B = (B-a[i])/10;
vis[i] = 0;
}
}
}
int main() {
scanf("%d",&T);
char c = getchar();
while(T--) {
char s[100];
int kase = 0;
gets(s);
n = strlen(s);
for(int i=0;i<n;i++) {
if(s[i]!=' ') {
a[kase++] = s[i]-'0';
}
}
n = kase;
memset(vis,0,sizeof(vis));
memset(A,0,sizeof(A));
B = 0;
tot = 1000000000;
dfs(0);
printf("%d\n",tot);
}
return 0;
}
本文深入探讨了一种通过枚举一半元素并利用`next_permutation()`函数优化另一半元素组合的方法,旨在提高解决复杂组合问题的效率。通过实例分析,展示了如何在编程中实现这一策略,并对比了不同优化手段的性能表现。

被折叠的 条评论
为什么被折叠?



