swust oj 简单背包问题(0032) DFS

Description

设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,…wn。

问能否从这n件物品中选择若干件放入背包中,使得放入的重量之和正好为S。

如果有满足条件的选择,则此背包有解,否则此背包问题无解。

Input

输入数据有多行,包括放入的物品重量为s,物品的件数n,以及每件物品的重量(输入数据均为正整数)

多组测试数据。

Output

对于每个测试实例,若满足条件则输出“YES”,若不满足则输出“NO“

Sample Input

20 5

1 3 5 7 9

Sample Output

YES

AC代码:

 1 #include<stdio.h>
 2 int AC,w[1000];//AC来标记和是否为s;
 3 void DFS(int k,int s)//搜索
 4 {
 5     int i;
 6     for(i=0;i<2;i++){//i=0表示不用背包w[k],i=1表示用背包w[k]
 7         int sum=0;//用来记录是否用了背包
 8         sum+=w[k]*i;
 9         if(sum>s)//是否超重,如果超重,就不要这个背包
10             sum=0;
11         if(sum==s)//记录正确结果
12             AC=1;
13             return;
14         }
15         if(sum<s&&k>=0)//当背包质量小于s时,s-sum表示s中sum的质量已占
16             DFS(k-1,s-sum);//继续搜索
17         if(AC==1)
18             return;
19     }
20     return;
21 }
22 int main()
23 {
24     int i,n,s;
25
26     while(scanf("%d%d",&s,&n)!=EOF){
27         AC=0;
28     for(i=0;i<n;i++)
29         scanf("%d",&w[i]);
30     DFS(n-1,s);
31     if(AC==1)
32         printf("YES\n");
33     else
34         printf("NO\n");
35     }
36     return 0;
37 }

结束语:

确实觉得自己BFS DFS很糟糕,不过多练一下,应该能ok。

时间: 2024-12-11 14:16:24

swust oj 简单背包问题(0032) DFS的相关文章

简单背包问题(0032)-swust oj

简单背包问题(0032) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 5657 Accepted: 1714 Accepted 搜索 动态规划 设有一个背包可以放入的物品重量为S,现有n件物品,重量分别是w1,w2,w3,…wn. 问能否从这n件物品中选择若干件放入背包中,使得放入的重量之和正好为S. 如果有满足条件的选择,则此背包有解,否则此背包问题无解. Description 输入数据有多行,包括放入的物品重量为s,物品

swust oj 1026--Egg pain&#39;s hzf

题目链接:http://acm.swust.edu.cn/problem/1026/ Time limit(ms): 3000 Memory limit(kb): 65535 hzf is crazy about reading math recently,and he is thinking about a boring problem. Now there are n integers Arranged in a line.For each integer,he wants to know

SWUST OJ Euclid&#39;s Game(0099)

Euclid's Game(0099) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 1855 Accepted: 589 Description Starts with two unequal positive numbers (M,N and M>N) on the board. Two players move in turn. On each move, a player has to write on the boar

【动态规划】简单背包问题II

问题 B: [动态规划]简单背包问题II 时间限制: 1 Sec  内存限制: 64 MB提交: 21  解决: 14[提交][状态][讨论版] 题目描述 张琪曼:“为什么背包一定要完全装满呢?尽可能多装不就行了吗?” 李旭琳:“你说得对,这和墨老师曾告诉我们的‘日中则昃,月满则亏’是一个道理.”所以,现在的问题是,她们有一个背包容量为v(正整数,0≤v≤20000),同时有n个魔法石(0≤n≤30),每个魔法石有一个体积 (正整数).要求从n个魔法石中,任取若干个装入包内,使背包的剩余空间为最

swust oj 649--NBA Finals(dp,后台略(hen)坑)

题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two teams, Lakers and Celtics, playing a series of NBA Finals until one of the teams wins n games. Assume that the probability of Lakers winning a game is

1469:数据结构:简单背包问题

本题难点:简单背包问题递归程序的理解 简单背包问题问题定义:有一个背包重量是S,有n件物品,重量分别是W0,W1...Wn-1问能否从这n件物品中选择若干件放入背包中使其重量之和正好为S 背包问题递归版本解释:其选择只有两种可能,选择一组物品中包含Wn-1 ,此时knap(s,n)的解就是knap(s - Wn-1,n-1)的解如果选择的物品中不包括Wn-1,这样knap(s,n)的解就是knap(s,n-1)的解knap(s,n) = true, 当 s=0时knap(s,n) = false

nyist oj 58 最少步数(dfs搜索)

最少步数 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 这有一个迷宫,有0~8行和0~8列: 1,1,1,1,1,1,1,1,1 1,0,0,1,0,0,1,0,1 1,0,0,1,1,0,0,0,1 1,0,1,0,1,1,0,1,1 1,0,0,0,0,1,0,0,1 1,1,0,1,0,1,0,0,1 1,1,0,1,0,1,0,0,1 1,1,0,1,0,0,0,0,1 1,1,1,1,1,1,1,1,1 0表示道路,1表示墙. 现在输入一个道路的坐标作为

线段树 [SWUST OJ 764] 校门外的树 Plus Plus

校门外的树 Plus Plus(0764) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 214 Accepted: 15 Description 西南某科技大学的校门外长度为 L 的公路上有一排树,每两棵相邻的树之间的间隔都是 1 米.我们可以把马路看成一个数轴,马路的一端在数轴 1 的位置,另一端在 L 的位置:数轴上的每个整数点,即 1,2,……,L,都种有一棵树. 现在要将这排树的某一段涂成某种颜色,给定 N 组区间[ 

背包 [POJ 2184 SWUST OJ 145] Cow Exhibition

Cow Exhibition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9479   Accepted: 3653 Description "Fat and docile, big and dumb, they look so stupid, they aren't much  fun..."  - Cows with Guns by Dana Lyons The cows want to prove to