沈泽宇 • 1年前
using namespace std; string s; char sb[100001]; int sum,a[1000005]; long long cnt,ans; int main(){
cin>>s;
for(int i=0;i<s.size();i++){
if(s[i]>='0'&&s[i]<='9') cnt=cnt*10+s[i]-'0';
else{
sum++;
a[sum]=cnt;
sb[sum]=s[i];
cnt=0;
}
}
sum++;
a[sum]=cnt;
for(int i=1;i<=sum;i++){
if(sb[i]=='*'){
a[i+1]*=a[i];
a[i+1]%=10000;
a[i]=0;
}
}
for(int i=1;i<=sum;i++){
ans+=a[i];
ans%=10000;
}
cout<<ans%10000;
return 0;
}
评论:
using namespace std; int n,a[30][30],b[30],s=INT_MAX,ss; void dfs(int x,int y,int k,int v){
if(k>ss/(n-1)/2) return;
if(k>s) return;
if(a[x][y]==0) return;
if(v>=n/2){
if(k<=s) s=k;
return;
}
for(int i=x;i<=n;i++){
for(int j=1;j<i;j++){
if(b[i]==0&&b[j]==0){
b[i]=b[j]=1;
dfs(i,j,k+a[i][j],v+1);
b[i]=b[j]=0;
}
}
}
} int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
scanf("%d",&a[i][j]);
ss+=a[i][j];
}
}
dfs(2,1,0,0);
printf("%d\n",s);
return 0;
}