目录
B. 小苯的数字切割
D. 小苯的最大和
B. 小苯的数字切割
(1)字符不能用 string 存,只能用 char
(2)char 转 int :c - ' 0 '
string 转 int :int num = stoi ( s )
转 ll :ll num = stoll ( s )
(3)int 转 string :string s = to_string ( num )
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e5 + 5, INF = 1e18;int T, n, ans;
string s;signed main()
{cin >> T;while (T --){cin >> n;s = to_string(n);int len = s.length();char s1 = s[0], s4 = s[len - 1];string s2 = s.substr(1, len - 1), s3 = s.substr(0, len - 1);if (s1 - '0' + stoi(s2) > stoi(s3) + s4 - '0'){int sz = 1;for (int i = 1; i < len; i ++)sz *= 10;ans = n / sz + n % sz;}elseans = n / 10 + n % 10;cout << ans << '\n';}return 0;
}
D. 小苯的最大和
(1)不删:从 i - 1转移过来
(2)删:1. 删两个,从 i - 2 转移过来
2. 删三个,从 i - 3 转移过来
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 2e5 + 5;int T, n, a[N], dp[N];signed main() {cin >> T;while (T--) {cin >> n;for (int i = 1; i <= n; i ++) {cin >> a[i];}dp[0] = 0;for (int i = 1; i <= n; i ++) {dp[i] = dp[i - 1] + a[i];if (i >= 2) {dp[i] = max(dp[i], dp[i - 2]);}if (i >= 3) {dp[i] = max(dp[i], dp[i - 3]);}}cout << dp[n] << '\n';}return 0;
}