京东笔试--神奇数
我来抛砖引玉一个,对每个数判断是否是神奇数,用01背包问题的思路解的。
没想到这么暴力都能AC
bool IsNum(int num){
vector<int> arr;
int all(0);
while (num){
all += num % 10;
arr.push_back(num % 10);
num = num / 10;
}
if (all % 2){
return false;
}
int half = all / 2;
vector<int> dp(half + 1);
for (int i = 0; i < arr.size(); i++){
int cap(half);
while (cap >= arr[i]){
dp[cap] = max(dp[cap - arr[i]] + arr[i], dp[cap]);
cap--;
}
}
return dp[half] == half;
}
int main(){
int l(0), r(0);
cin >> l >> r;
int res(0);
for (int i = l; i <= r; i++){
if (IsNum(i)){
res++;
}
}
cout << res;
return 0;
}
#京东##C++工程师#
海康威视公司福利 1282人发布
