ACdream1726 DFS大好题!!!!!
来源:互联网 发布:手机网络打印机 编辑:程序博客网 时间:2024/05/01 10:38
————我是链接—————
这道DFS题目一看上去就有思路因为这直接排个序一路加过去就行了,但是这个题目定的实在是太好了
稍微姿势不对就会WA或者超限,而且这里考到的剪枝知识让我大开眼见
刚开始排序排反了,WA了几发,后来剪枝剪得不好又超时了几发
后来想到了一个方法,就是存一个数组,如果后面连续的的数小于rest那么就没有搜下去的必要的,直接return false
我做的那叫一个红光满面,酣畅淋漓。
来一发又臭又长的的代码
#include<iostream>#include<cstring>#include<algorithm>#include<cstdio>using namespace std;int sum[55];int n,m;long long a[55];long long num;bool cmp(long long a,long long b){ return a>b;}bool dfs(int pos,long long rest){ int i; if(rest==0) return true; else if(rest>sum[pos])//A了觉得没事做的可以把这行和return false注销了试一试 return false; for(i=pos;i>=0;i--) { if(a[i]>rest)continue; if(rest==a[i])return true; if(i!=0) { if(dfs(i-1,rest-a[i])) return true; } else { if(rest==a[i]) return true; return false; } } return false;}int main(){ int i; while(scanf("%d%lld",&m,&num)!=EOF) { n=0; memset(sum,0,sizeof(sum)); memset(a,0,sizeof(a)); long long r; for(i=0;i<m;i++) { scanf("%lld",&r); if(r>num)continue; a[n++]=r; } sort(a,a+n); for(i=0;i<n;i++) { if(i==0) sum[i]=a[i]; else sum[i]=sum[i-1]+a[i]; } if(dfs(n-1,num)) { printf("Yes\n"); } else printf("No\n"); } return 0;}
0 0
- ACdream1726 DFS大好题!!!!!
- ACdream1726 A Math game(dfs)
- ACdream1726
- ACdream1726-A Math game
- 大家 大好
- 心情大好
- 河山大好
- 编程十大好习惯
- 编程十大好习惯
- 编程十大好习惯
- 编程十大好习惯
- Cが大好き
- 十大好习惯
- 网络视频会议前景大好
- 菜鸟编程10大好习惯
- 菜鸟编程十大好习惯~!
- 编程十大好习惯(转帖)
- ERP软件产业的大好时机
- java中与mysql连接详细操作
- 浅谈jsp、freemarker、velocity区别
- CentOS、Mysql性能分析
- JavaScript基础----24JS事件详解-事件处理
- HDU5363_____Key Set
- ACdream1726 DFS大好题!!!!!
- POJ_3624
- 深度学习相关
- The constructor SimpleAdapter(new View.OnClickListener(){}, List<Map<String,Object>>, ..的解决方法
- linux yum 命令详解
- JavaScript基础----25JS事件详解-事件对象
- 浅谈算法和数据结构: 十二 无向图相关算法基础
- JAVA当中的类修饰符,成员变量修饰符,方法修饰符
- 多校第六场 1009 hdu 5361 In Touch(贪心+STL)