#include <bits/stdc++.h> using namespace std; const int MAXN = 19; bool dp[MAXN][MAXN * 9 + 1];//根据题意开个18层,因为我下标从1开始就定19了,每位数都有9种可能 int main() { string s;cin >> s; int sum = 0; for (int i = 0; i < s.size(); i++) sum += (s[i] - '0'); if (sum % 2) {//和为计数染不了色 cout << "No"; return 0; } int half = sum / 2; dp[0][0] = 1; //初始化第一层,只有0种颜色 //bool dp[i][j]表示前i位,颜色种类j是否可达 for (int i = 1; i <= s.size(); ++i) { // 将当前字符转换为对应的数字 int tmp = s[i-1] - '0'; //枚举颜色种类j for (int j = 1; j <= half; ++j) { //先继承上一层的状态(不选) dp[i][j] = dp[i - 1][j]; //看看能否从dp[i - 1][j - tmp]转移过来(选) if(j >= tmp)dp[i][j] |= dp[i - 1][j - tmp]; } } if (dp[s.size()][half]) { cout << "Yes"; } else { cout << "No"; } return 0; }