Friday, December 4, 2015

UVa 11258 - String Partition

// UVa 11258 - String Partition

#include <iostream>
#include <string>
#include <string.h>
using namespace std;

#define uint unsigned long long
#define lim 2147483648

int main() {
	int cases;
	for (cin >> cases; cases; cases--) {
		string st;
		cin >> st;
		int n = st.length();
		uint T[200];
		memset(T, 0, sizeof(T));
		for (int i = 0; i < n; i++) {
			uint e = 1, right = 0;
			for (int j = i; j >= 0; j--) {
				right += (st[j] - '0') * e;
				if (right >= lim)
					break;
				if (st[j] != '0' || i == j) {
					if (j > 0)
						T[i] = max(T[i], T[j - 1] + right);
					else
						T[i] = max(T[i], right);
				}
				e *= 10;
			}
		}
		cout << T[n - 1] << endl;

	}
	return 0;
}

No comments:

Post a Comment