原题链接:蓝桥杯算法提高VIP-盾神与砝码称重
解题思路:dfs三种情况就行了 放物体一边 不放 放物体对面
注意事项:
参考代码:
#include<iostream> #include<algorithm> using namespace std; int n, m; int num; int a[25], sum[25]; int flag = 0; void fun(int x, int y) { if(flag == 1) { return ; } if(abs(x)>sum[y])///判断以后的砝码是否能称出来现在的重量 return; if(x == 0||abs(x)==sum[y]) { flag = 1; return ; } if(y<0) { return; } fun(x-a[y], y-1);//不和物品放一起 fun(x, y-1);//不放砝码 fun(x+a[y], y-1);//放在物品的对立边 return; } int main() { cin>>n>>m; for(int i = 0; i < n; i++) { cin>>a[i]; if(i>0) sum[i]=sum[i-1]+a[i];///前i个砝码重量和 else sum[0]=a[0]; } // sort(a, a+n); for(int i = 0; i < m; i++) { flag = 0; cin>>num; fun(num,n-1); if(flag == 0) { cout<<"NO"<<endl;; } else { cout<<"YES"<<endl; } } return 0; }
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复