题目链接:http://acm.swust.edu.cn/problem/465/

还有一道题只是描述不一样,方法一模一样(http://acm.swust.edu.cn/problem/644/)

Time limit(ms): 1000        Memory limit(kb): 65535
 
Description
吴奶奶有个可爱的外孙女——琪琪,她很喜欢小动物,尤其喜欢养鱼。为了让小孙女养到漂亮的小鱼,吴奶奶一大早就到花鸟鱼虫市场买鱼。这个市场可真大,里面有各种各样的宠物,就连宠物鱼都有好几十种。这些鱼实在是太美了,买的人越来越多,可是因为货源有限,卖鱼的老板不得不规定:同一种鱼,每个人最多只能买一条,并且有些鱼是不能一起买的,因为它们之间会互相争斗吞食。 
吴奶奶想尽可能地买多些鱼,但可惜,她的资金有限,这可怎么办好呢?请编写一个程序帮助她。如果有多个方案都能买到尽可能多的鱼,则选择所花资金最多的一个。

 
Input
输入文件的第一行为两个正整数M(M≤1000),N(N≤30),分别表示吴奶奶的资金和鱼的种类。以下N行,每行有两个正整数S(1≤S≤N),T,分别表示某种鱼的编号以及该鱼的价格。 
接着,每行有两个整数P,Q。当P,Q大于0时,表示P,Q不能共处;当P,Q均等于0时,表示输入文件的结束。

 
Output
文件的第一行为两个正整数X,Y,分别表示所买鱼的条数和总花费。以下X行,每行有一个整数,表示所买鱼的编号。编号按升序排列输出。 
如果题目有多个解,只需输出其中一个。

 
Sample Input
170 7
1 70
2 50
3 30
4 40
5 40
6 30
7 20
1 4
1 7
3 4
3 5
5 7
6 7
0 0
Sample Output
4 160
2
4
5
6
 
Hint
 
 
解题思路:这道题除去鱼之间的相互吞食,和输出所购买的鱼,就是一个0-1背包问题。
     现在在0-1背包的基础上为了达到以上两点设计一个dfs算法,递归模拟这个过程,在代码中有详细的注释,这里就不多说了~~~
 
代码如下:
 /******************0-1背包+dfs******************/
#include <iostream>
using namespace std; #define rep(i,a,b) for(int i=a;i<=b;i++) int buy[], sign[];//sign标记鱼的购买状态,buy最优购买方案
int mpt[][];//表示鱼的相互克制状态
int val, num, n, m, vi[];//vi价格 void dfs(int cur, int sum, int cnt){
int ptr[];//中转变量
if (cur > n){
if (num<cnt || (num == cnt&&sum>val)){
num = cnt;
val = sum;
rep(i, , n)buy[i] = sign[i];
}
return;
}
if (!sign[cur] && sum + vi[cur] <= m){
rep(i, , n) ptr[i] = sign[i];
sign[cur] = ;//标记这条鱼已购买
rep(i, , n){
if (mpt[cur][i] && !sign[i])
sign[i] = ;
}
dfs(cur + , sum + vi[cur], cnt + );
//还原鱼的购买状态,方便下一次搜索
rep(i, , n) sign[i] = ptr[i];
sign[cur] = ;
}
dfs(cur + , sum, cnt);
}
int main(){
int a, b;
cin >> m >> n;
//鱼不一定按顺序给出,坑爹啊~~
rep(i, , n){
cin >> a;
cin >> vi[a];
}
cin >> a >> b;
while (a || b){
mpt[a][b] = mpt[b][a] = ;
cin >> a >> b;
}
dfs(, , );
cout << num << ' ' << val <<endl;
rep(i, , n){
if (buy[i] == )
cout << i << endl;
}
return ;
}

[Swust OJ 465]--吴奶奶买鱼(0-1背包+dfs)的更多相关文章

  1. ACM-吴奶奶买鱼

    题目描述:吴奶奶买鱼   吴奶奶有个可爱的外孙女——琪琪,她很喜欢小动物,尤其喜欢养鱼.为了让小孙女养到漂亮的小鱼,吴奶奶一大早就到花鸟鱼虫市场买鱼.这个市场可真大,里面有各种各样的宠物,就连宠物鱼都 ...

  2. [Swust OJ 649]--NBA Finals(dp,后台略(hen)坑)

    题目链接:http://acm.swust.edu.cn/problem/649/ Time limit(ms): 1000 Memory limit(kb): 65535 Consider two ...

  3. SWUST OJ NBA Finals(0649)

    NBA Finals(0649) Time limit(ms): 1000 Memory limit(kb): 65535 Submission: 404 Accepted: 128   Descri ...

  4. [Swust OJ 404]--最小代价树(动态规划)

    题目链接:http://acm.swust.edu.cn/problem/code/745255/ Time limit(ms): 1000 Memory limit(kb): 65535   Des ...

  5. poj1417 带权并查集+0/1背包

    题意:有一个岛上住着一些神和魔,并且已知神和魔的数量,现在已知神总是说真话,魔总是说假话,有 n 个询问,问某个神或魔(身份未知),问题是问某个是神还是魔,根据他们的回答,问是否能够确定哪些是神哪些是 ...

  6. P1417 烹调方案 (0/1背包+贪心)

    题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...

  7. 洛谷 P1064 金明的预算方案 (有依赖的0/1背包)

    题目描述 金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间.更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过NN元钱就行”. ...

  8. POJ 1636 Prison rearrangement DFS+0/1背包

    题目链接: id=1636">POJ 1636 Prison rearrangement Prison rearrangement Time Limit: 3000MS   Memor ...

  9. POJ 1745 【0/1 背包】

    题目链接:http://poj.org/problem?id=1745 Divisibility Time Limit: 1000MS   Memory Limit: 10000K Total Sub ...

随机推荐

  1. HDU2005-第几天

    描述: 给定一个日期,输出这个日期是该年的第几天. 代码: #include<stdio.h> #include<string.h> #include<iostream& ...

  2. [转] iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用

    介绍: Grand Central Dispatch 简称(GCD)是苹果公司开发的技术,以优化的应用程序支持多核心处理器和其他的对称多处理系统的系统.这建立在任务并行执行的线程池模式的基础上的.它首 ...

  3. web附件中文名

    response.setHeader("Content-Disposition", "attachement;filename="+URLEncoder.enc ...

  4. C winpcap 网络抓包 并获取IP TCP 协议的相关信息

    以太网协议分析函数: void ethernet_protocol_packet_handle (u_char *argument, const struct pcap_pkthdr *packet_ ...

  5. ArcSde for Oracle服务注册

    1.首先安装ArcSde,安装完成之后在dos命令窗口运行如下命令: sdeservice -o create -d oracle,instance -p sde -i port; 参数说明: ins ...

  6. JAVA GUI学习 - JTable表格组件学习_C ***

    /** * JTable高级应用 * @author Wfei * */ public class JTableKnow_C extends JFrame { JTable jTable; MyJMe ...

  7. PHP第一章学习——了解PHP(上)

    计划开启PHP学习教程,情况如下: 1.采用教程35章48个视频文件 2.时间4月29日-5月6日 共计8天 3.具体划分每天学习章节数不少于5个,预留5-6号时间为五一假期出玩情况 4.要求认真学习 ...

  8. 带你走进EJB--MDB

    在之前的文章中我们介绍了带你走进EJB--JMS 和 带你走进EJB--JMS编程模型 对JMS有了初步的了解, 作为EJB系列的文章我们会继续对EJB相关的内容做进一步深的学习和了解.而此次需要进行 ...

  9. UITextField align left margin

    如果我们想让我们的UITextField输入的字体偏移几个像素,我们常常用空格来代替,有时候我们不想用空格的话怎么办? #import <UIKit/UIKit.h> @interface ...

  10. 在C#中使用 Win32 和其他库

    C# 用户经常提出两个问题:“我为什么要另外编写代码来使用内置于 Windows® 中的功能?在框架中为什么没有相应的内容可以为我完成这一任务?”当框架小组构建他们的 .NET 部分时,他们评估了为使 ...