(1) 魔法树
#include<iostream> #include<string> #include<algorithm> #include<vector> using namespace std; int main() { long n; cin >> n; vector<int>array; for(int i=0;i<n;i++) { int temp; cin>>temp; array.push_back(temp); } dp(n+1); // dp[i]表示第i个树至少需要的次数,下标0 -- n-1 dp[0]=0; sort(array.rbegin(),array.rend()); // 降序 for(int j=1;j<n;j++) dp[j]=dp[j-1]+array[0]-array[j]; cout<<dp[n-1]<<endl; return 0; }(2) 字符串变换
#include<iostream> #include<string> #include<algorithm> #include<vector> using namespace std; int main() { string s; cin >> s; long n; cin >> n; int ans[10]; for (int i = 0; i < 10; i++) { ans[i] = i; } while (n--) // 因为只有0-9在变化,反复遍历变化的数字即可,学习理解这种思想,减少时间复杂度 { int a, b; cin >> a >> b; for (int i = 0; i < 10;i++) if (ans[i] == a) ans[i] = b; // 修改成变化后的值 } for (int j = 0; j < s.size(); j++) // 时间复杂度为 O(s.size()) { if (ans[s[j] - '0'] != s[j] - '0') s[j] = ans[j] + '0'; } cout << s << endl; return 0; }
题目不难,学会优化代码,减少时间复杂度,多思考思考问题
全部评论
(2) 回帖