#include <iostream> #include <vector> using namespace std; typedef uint32_t uint; bool isMiracle(uint num) { vector<int> arr1; uint sum = 0; while(num) { sum += (num % 10); arr1.push_back(num%10); num /= 10; } if(sum & 1) return false; sum = sum >> 1; vector<bool> dp(sum+1, 0); dp[0] = true; for(auto n : arr1) if(dp[sum]) return true;//提前结束 for(int i = sum; i>=n; i--){ //这一行之前的逻辑有问题 if(dp[i-n]) dp[i] = true; } return dp[sum]; } int main() { int l, r; while(cin >> l >> r) { int res = 0; for(int i = l; i <= r; i++) { if(isMiracle(i)) res++; } cout << res << endl; } return 0; } 之前写法有问题,现在修改了一些问题; 另外加上剪枝,可以提前结束; 难得自己思路是对的,难得代码也写出来,结果出现这种毛病;上次拼多多犯过类似的错误,这次又特么犯了一次,好尴尬!!
点赞 评论

相关推荐

08-05 18:14
门头沟学院 Java
小花的沉默:是学历厂没错啊,学历太高了不要
投递小鹏汽车等公司10个岗位
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务