解题思路: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语言程序设计教程(第三版)课后习题12.1 (C语言代码)浏览:978 |
C语言程序设计教程(第三版)课后习题5.4 (C语言代码)浏览:1884 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:758 |
妹子杀手的故事 (C语言代码)浏览:679 |
C语言程序设计教程(第三版)课后习题5.7 (C++代码)浏览:846 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:510 |
三角形 (C++代码)递推浏览:755 |
简单的a+b (C语言代码)浏览:596 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:665 |
理财计划 (C语言代码)浏览:465 |