请问一下各位大佬,这个代码哪里有问题
查看原帖
请问一下各位大佬,这个代码哪里有问题
761210
dpdfs12345楼主2023/8/4 16:37
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int N = 45;
int n,k;
vector<int> ans;
bool a[N];
string s;
vector<int> Max(vector<int> a,vector<int> b){
	if(a.size() < b.size()) return b;
	if(a.size() > b.size()) return a;
	for(int i=0;i<a.size();i++){
		if(a[i] > b[i]) return a;
		if(a[i] < b[i]) return b;
	}
	vector<int> t;
	return t;
}
vector<int> mul(vector<int> a,vector<int> b){
	reverse(a.begin(),a.end());
	reverse(b.begin(),b.end());
	if(Max(a,b) == a){
		vector<int> t = a;
		a = b;
		b = t;
	}
	int res[100] = {};
	for(int i=0;i<a.size();i++){
		vector<int> c;
		for(int j=0;j<b.size();j++){
			c.push_back(a[i] * b[j]);
		}
		reverse(c.begin(),c.end());
		for(int j=1;j<=i;j++) c.push_back(0);
		reverse(c.begin(),c.end());
		for(int j=0;j<c.size();j++) res[j] += c[j]; 
	}
	for(int i=0;res[i]!=0;i++){
		res[i + 1] += res[i] / 10;
		res[i] %= 10;
	}
	vector<int> ret;
	for(int i=0;res[i]!=0;i++) ret.push_back(res[i]);
	reverse(ret.begin(),ret.end());
	return ret;
}
vector<int> cal(){
	vector<int> t;
	vector<int> sum;
	sum.push_back(1);
	for(int i=0;i<s.size()-1;i++){
		if(a[i] == true){
			t.push_back(s[i] - '0');
			sum = mul(sum,t);
			t.clear();
		}
		else t.push_back(s[i] - '0');
	}
	t.push_back(s[s.size()-1] - '0');
	sum = mul(sum,t);
	return sum;
}
void dfs(int pos,int cnt){
	if(pos == s.size() - 1) return ;
	if(cnt == k){
		ans = Max(ans,cal());
		return ;
	}
	dfs(pos + 1,cnt);
	a[pos] = true;
	dfs(pos + 1,cnt + 1);
	a[pos] = false;
}
int main(){
	scanf("%d %d",&n,&k);
	cin >> s;
	dfs(0,0);
	for(int i=0;i<ans.size();i++) printf("%d",ans[i]);
	return 0;
}
2023/8/4 16:37
加载中...