51nod 1268 和为K的组合 【dfs or dp】
2017-10-22 20:41
423 查看
dfs做法 这个dfs写的不错 开始我写的运行结果是错的,这个是某一个大神的,代码很短 ,而且很精炼,值得学习 #include<iostream> #include<stdio.h> #include<string> #include<string.h> using namespace std; int flag=0,n; long long a[30]; long long m; void dfs(int l,long long sum){ if(sum==m){ flag=1; return ;} else if(sum>m) return ; for(int i=l+1;i<=n&&!flag;i++) dfs(i,sum+a[i]); } int main(){ cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; long long sum=0; dfs(0,0); if(flag) cout<<"Yes"<<endl; else cout<<"No"<<endl; return 0; } dp做法 #include<iostream> #include<stdio.h> #include<string> #include<string.h> using namespace std; typedef long long ll; ll num[100],dp[1000000]; int main(){ ll k,n; cin>>n>>k; for(int i=0;i<n;i++) cin>>num[i]; memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++) //枚举每一个物品 for(int j=k;j>=num[i];j--) //枚举每一种大小的状态 dp[j]=max(dp[j],dp[j-num[i]]+num[i]); if(dp[k]==k) cout<<"Yes"<<endl; else cout<<"No"<<endl```````````` return 0; }
相关文章推荐
- 51nod 1268 和为K的组合【Dp/Dfs/折半枚举】
- 【51Nod - 1268】和为K的组合 【01背包】or 【dfs】
- 51nod 1268 和为K的组合 dfs
- 51nod 1268 和为K的组合 -dfs枚举
- 51Nod 1268 和为K的组合 (Dp,暴力)..数据水了
- ural 1005 dp dfs or 0 1背包
- 51nod 1268 和为K的组合
- 51nod 1405 树的距离之和 (两次dfs,树形dp)
- 51nod-【1268 和为K的组合】
- 51nod 1486 大大走格子【组合数学】【DP】
- 【hautoj 1281】邪能炸弹 【DFS 暴力】or 【DP】
- 51nod 1268 和为k的组合
- 51nod 1268 和为K的组合
- 51Nod:1268 和为K的组合
- 51nod oj 1268 和为K的组合【dfs深搜----或二分区间再二分查找】
- 51Nod 1268 和为K的组合
- 51nod 40 序列分解 暴力dfs or 折半+字典树
- POJ 1321 棋盘问题(暴力dfs or DP)
- RQNOJ P579 商人的宣传(DP or DFS)
- codevs 1043 方格取数 (dfs or dp)