以下代码有几处不同之处,使他们的结果天差地别,你能帮忙找出来吗?
题目是小柴买东东
#include<bits/stdc++.h>
using namespace std;
long long n=0,x=0,a[77];
map<long long ,map<long long,long long> > mp ;
int dfs(long long node,long long pos){
if(pos==1){
return node;
}
if(mp[node][pos]!=0){
return mp[node][pos];
}
int ans1=node/a[pos]+dfs(node%a[pos],pos-1);
int ans2=node/a[pos]+1+dfs((node/a[pos]+1)*a[pos]-node,pos-1);
//cout<<ans1<<" "<<ans2<<endl;
return mp[node][pos]=min(ans1,ans2);
}
int main(){
cin>>n>>x;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cout<<dfs(x,n);
return 0;
}
#include <bits/stdc++.h>
using namespace std;
long long a[77],n,x,ans1=0,ans2=0;
map<long long ,map<long long,long long> > mp ;
int dfs(long long node,long long k){
if(k==1){
return node;
}
if(mp[node][k]!=0){
return mp[node][k];
}
ans1=node/a[k]+dfs(node%a[k],k-1);
ans2=node/a[k]+1+dfs((node/a[k]+1)*a[k]-node,k-1);
cout<<ans1<<" “<<ans2<<” “<<node<<” "<<k<<endl;
mp[node][k]=min(ans1,ans2);
return min(ans1,ans2);
}
int main(){
cin>>n>>x;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cout<<dfs(x,n);
return 0;
}
其实我也不知道不同在哪