拼多多算法9月25
100,0,100,0
第二题卡住了
就贴个第三题吧
#include <iostream> #include <cstring> #include <cmath> #include <vector> #include <algorithm> #include <vector> #include <list> #include <stack> #include <string> #include <set> #include <queue> #include <climits> #include <unordered_set> #include <map> #include <iostream> #include <algorithm> #include <cstring> #include <unordered_map> #include <initializer_list> #include <typeinfo> #include <map> typedef long long ll; using namespace std; int cnt = 0; double dp[55][55]; double dfs(int u,int v){ if(dp[u][v] != 0){ return dp[u][v]; } double ans = 0; if((u == 0&& v== 0)) return dp[u][v] = 1.0; if(u != 0){ ans += dfs(u - 1,v); } if(v != 0){ ans += dfs(u,v - 1); } return dp[u][v] = (ans + 1); } string ans = ""; int flag = 0; double eps = 1e-6; void get_ans(ll u,ll v,double k){ if(abs(k) < eps){ flag = 1; return; } if(u -1 >=0 && dp[u - 1][v] >= k){ ans += "a"; get_ans(u-1,v,k - 1); if(flag) return; }else if(v -1 >=0){ ans += "b"; get_ans(u,v - 1,k - dp[u - 1][v] - 1); if(flag) return; } } int main() { dfs(54,54); ll n,m;double k; scanf("%lld%lld%lf",&n,&m,&k); get_ans(n,m,k); cout << ans << endl; return 0; }