TOJ 3162 Hay For Sale --DFS
2015-03-04 19:44
162 查看
题意
题意很明确,就是给出一列数字,然后求出用这几个数能组成的不超过某个数的最大值;比如:样例:
input
7 3
2 5 6
output
7
输入中7代表最大值为7, 3表示有三个数,如下的2,5,6
然后在这三个数中 找出几个数的和,使其为不超过7的最大值;
这里的输出就是7 = 2+5
思路
方法感觉有很多, 优先考虑dfs, 这里可以从最大值开始向下搜索,找到第一个满足条件的就是最大的;
代码
/*Accepted 3162 C++ 0.5K 0'00.00" 872K */ #include <stdio.h> int C,H,V[5001]; bool dfs(int cur,int k) { if(cur==0) return 1; if(k>=H) return 0; if(cur<0)return 0; else { if(dfs(cur-V[k],k+1)||dfs(cur,k+1)) return 1; return 0; } } int main() { while(~scanf("%d%d",&C,&H)) { for(int i=0;i<H;i++) scanf("%d",&V[i]); for(int i=C;i>=0;i--) { if(dfs(i,0)||i==0) { printf("%d\n",i); break; } } } }
相关文章推荐
- BZOJ 1606: [Usaco2008 Dec]Hay For Sale 购买干草
- 第一篇(Hay For Sale 购买干草)【动规】
- 洛谷 P2925 [USACO08DEC]干草出售Hay For Sale
- AC日记——[USACO08DEC]干草出售Hay For Sale 洛谷 P2925
- BZOJ——1606: [Usaco2008 Dec]Hay For Sale 购买干草
- BZOJ1606: [Usaco2008 Dec]Hay For Sale 购买干草
- BZOJ_1606_ [Usaco2008_Dec]_Hay_For_Sale _购买干草_(背包)
- P2925 [USACO08DEC]干草出售Hay For Sale
- 1606: [Usaco2008 Dec]Hay For Sale 购买干草
- 1606: [Usaco2008 Dec]Hay For Sale 购买干草
- Hay For Sale
- bzoj 1606 [Usaco2008 Dec]Hay For Sale 购买干草(01背包)
- bzoj1606[Usaco2008 Dec]Hay For Sale 购买干草
- [bzoj1606][Usaco2008 Dec]Hay For Sale 购买干草
- bzoj1606【Usaco2008 Dec】Hay For Sale 购买干草
- BZOJ1606: [Usaco2008 Dec]Hay For Sale 购买干草
- 【bzoj 1606】[Usaco2008 Dec]Hay For Sale 购买干草
- bzoj1606[Usaco2008 Dec]Hay For Sale 购买干草
- bzoj 1606: [Usaco2008 Dec]Hay For Sale 购买干草【01背包】
- [Usaco2008 Dec]Hay For Sale 购买干草