题目链接:http://codeforces.com/contest/1060/problem/B

       题意是输入一个n,从1-n中找两个数,使得a+b=n,而且S(a)+S(b)的值是所有两个数中最大的。S函数求的是一个数每一位上的数字之和,比如S(123) = 1 + 2 + 3。

       思路算是贪心吧,为了让S(a)+S(b)的值最大,所以我们要让a里尽量多的包含9,这样就能求出最大的S(a)+S(b),我的写法是比如n是345,然后我就让a等于299,b等于345-299;如果n是12345,那就让a等于9999,b等于12345-9999...


AC代码:

#include <bits/stdc++.h>
#define ll long long
using namespace std;

int main()
{
	ll n;
	string str;
	cin>>n;
	str = to_string(n);
	int len = str.length();
	if(len == 1){
		cout<<n<<endl;
		return 0;
	}
	int flag = 0;
	for(int i=1;i<len;i++){
		if(str[i] != '0'){
			flag = 1;
			break;
		}
	}
	if(flag == 0){
		cout << 9 * (len - 1) + (str[0] - '0')<<endl;
	}
	else{
		ll x = (str[0] - '0') - 1;
		for(int i=1;i<len;i++){
			x *= 10;
			x += 9;
		}
		ll y = n - x;
		ll ans = 9 * (len - 1) + (str[0] - '0') - 1;
		while(y){
			ans += (y % 10);
			y /= 10;
		}
		cout << ans << endl;
	}
	return 0;
}