usaco Milk Measuring
2015-10-06 16:17
309 查看
迭代加深搜索。
一开始写了个完全背包,但只能过几个测试点,发现它有些情况不能很好的判断。
好在迭代加深并不难写。
一开始写了个完全背包,但只能过几个测试点,发现它有些情况不能很好的判断。
好在迭代加深并不难写。
/* ID: modengd1 PROG: milk4 LANG: C++ */ #include <iostream> #include <stdio.h> #include <memory.h> #include <algorithm> #include <vector> using namespace std; int input[100]; int Q,P; int ans[100]; int dp[20001]; bool DFS(int deep,int index,int limit)//deep是当前层深也是就是该取第几个数了,index是前一个数在input数组中的下标。limit是本次搜索要找的集合的大小 { if(deep==limit) { memset(dp,false,sizeof(dp)); dp[0]=true; for(int i=0;i<limit;i++) { for(int j=ans[i];j<=Q;j++) { dp[j]|=dp[j-ans[i]]; } } if(dp[Q]) { cout<<limit; for(int i=0;i<limit;i++) cout<<' '<<ans[i]; cout<<endl; return true; } else return false; } for(int i=index+1;i<=P-(limit-deep-1);i++) { ans[deep]=input[i]; if(DFS(deep+1,i,limit)) return true; } return false; } int main() { freopen("milk4.in","r",stdin); freopen("milk4.out","w",stdout); scanf("%d",&Q); scanf("%d",&P); for(int i=0;i<P;i++) { scanf("%d",&input[i]); } sort(input,input+P); for(int i=1;i<=P;i++) { if(DFS(0,-1,i)) break; } return 0 ; }
相关文章推荐
- Web QQ自动强制加好友代码
- 0 /空/ 空数组
- CF#309-DIV2-C. Kyoya and Colored Balls-组合数学
- 面向对象设计步骤
- trace.log20151006---PropertyUtils.describe
- mysql子查询优化
- iOS开发之 简易随机点名册的设计
- C++各种崩溃分析
- 5.Swift 跳转和动画
- Unable to execute dex: Multiple dex files define 错误在哪里
- 20151006考试总结
- opencv之dft及mat类型转换
- C#中抽象类与接口
- js中的几种继承方式
- C#实现获取IIS站点及虚拟目录信息的方法
- Spark修炼之道(基础篇)——Linux大数据开发基础:第十四节:Shell编程入门(六)
- Codeforces Round #323
- 登山
- 关于ActivityA中的FragmentA 启动 ActivityB,FragmentA的startActivityForResult回调的问题
- Jsoup进阶之获取指定数据