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

输入

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

输出

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

样例输入

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

样例输出

4 160
2
4
5
6 思路:就是带附加条件的背包问题,只要单独判断附加条件即可。 备注:这道写的有问题,测试用例对了,但是一直A不了。。。。。。。。。。。。。。。。。。。。
#include<iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; const int MAX = ;
int mon, n, w[MAX], map[MAX][MAX]; struct C
{
int cost, len;
int path[MAX];
} ans; struct yu
{
int num, w;
}yyu[MAX]; int cmp(int a, int b)
{
return a < b;
} int check(int a[],int len,int inx)
{
for (int i = ; i < len; i++)
{
if (map[inx][a[i]] == )
return ;
}
return ;
} void DFS(int pos, C cur)
{
//cout << "pos:" << pos << "\tcur.len:" << cur.len << "\tcur.cost:" << cur.cost << endl; if (pos >= n + )
{
if (cur.len > ans.len && (cur.len == ans.len && cur.cost > ans.cost)) ans = cur; return;
} if (cur.cost > mon) return; if (check(cur.path,cur.len,pos))
{
C temp = cur;
temp.cost += yyu[pos].w;
temp.path[temp.len++] = yyu[pos].num;
DFS(pos + , temp);
} DFS(pos + , cur); } int main()
{
cin >> mon >> n;
for (int i = ; i <= n; i++)
cin >> yyu[i].num >> yyu[i].w; int x, y;
while (cin >> x >> y && (x||y))
{
map[x][y] = ;
map[y][x] = ;
} C t;
t.cost = ;
t.len = ;
memset(t.path, , sizeof(t.path)); DFS(, t); cout << ans.len << " " << ans.cost << endl;
sort(ans.path, ans.path + ans.len, cmp);
for (int i = ; i < ans.len; i++)
cout << ans.path[i] << endl; return ;
}

后来改过之后可以AC了。

初步猜测问题应该是:

1.多组输入。

2.鱼的编号问题,map矩阵代表鱼的标号矩阵,参数应该是鱼的编号,之前写成了索引,所以有问题。

3.初始化问题,结构体输入需要初始化。

备注:以后输入输出尽量选用同一种标准,不要一会用cincout,一会用scanfpprintf。

正确的代码:

 // 吴奶奶买鱼.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h" #include<iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
using namespace std; const int MAX = ;
int mon, n, w[MAX], map[MAX][MAX]; struct C
{
int cost, len;
int path[MAX];
C()
{
cost = ;
len = ;
memset(path, , sizeof(path));
}
}ans; struct Yu
{
int num, w;
Yu()
{
num = ;
w = ;
}
}yyu[MAX]; int cmp(int a, int b)
{
return a < b;
} int check(int a[],int len,int inx)
{
for (int i = ; i < len; i++)
{
if (map[inx][a[i]] == )
return ;
}
return ;
} void DFS(int pos, C cur)
{
//cout << "pos:" << pos << "\tcur.len:" << cur.len << "\tcur.cost:" << cur.cost << endl; if (pos >= n)
{
//cout << "pos:" << pos << "\tcur.len:" << cur.len << "\tcur.cost:" << cur.cost << endl;
if ((cur.cost <= mon) && (cur.len > ans.len || (cur.len == ans.len && cur.cost > ans.cost)))
{
ans.len = cur.len;
ans.cost = cur.cost;
memcpy(ans.path, cur.path, sizeof(cur.path));
//cout << "======================pos:" << pos << "\tans.len:" << ans.len << "\tans.cost:" << ans.cost << endl;
} return;
} if (cur.cost > mon) return; if (check(cur.path,cur.len,yyu[pos].num))
{
C temp = cur;
temp.cost += yyu[pos].w;
temp.path[temp.len++] = yyu[pos].num;
DFS(pos + , temp);
} DFS(pos + , cur); } int main()
{
while (cin >> mon >> n)
{
memset(map, , sizeof(map)); for (int i = ; i < n; i++)
cin >> yyu[i].num >> yyu[i].w; int x, y;
while (cin >> x >> y && (x || y))
{
map[x][y] = ;
map[y][x] = ;
} C t;
t.cost = ;
t.len = ;
memset(t.path, , sizeof(t.path)); DFS(, t); cout << ans.len << " " << ans.cost << endl;
sort(ans.path, ans.path + ans.len, cmp);
for (int i = ; i < ans.len; i++)
cout << ans.path[i] << endl; } return ;
}

ACM-吴奶奶买鱼的更多相关文章

  1. [Swust OJ 465]--吴奶奶买鱼(0-1背包+dfs)

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

  2. 收集一些关于OI/ACM的奇怪的东西……

    一.代码: 1.求逆元(原理貌似就是拓展欧几里得,要求MOD是素数): int inv(int a) { if(a == 1) return 1; return ((MOD - MOD / a) * ...

  3. 【转】lonekight@xmu·ACM/ICPC 回忆录

    转自:http://hi.baidu.com/ordeder/item/2a342a7fe7cb9e336dc37c89 2009年09月06日 星期日 21:55 初识ACM最早听说ACM/ICPC ...

  4. 膜拜acm大牛 虽然我不会这题,但是AC还是没有问题的~(转自hzwer)

    wywcgs: 亦称Lord Wu,俗名吴垠,2009级厦门大学智能科学与技术学院研究生,本科就读于哈尔滨工业大学.因其深厚的算法功底与独到的思维方式,被尊为“吴教主”,至今声威犹存. 2006年起参 ...

  5. 一位学长的ACM总结(感触颇深)

    发信人: fennec (fennec), 信区: Algorithm 标 题: acm 总结 by fennec 发信站: 吉林大学牡丹园站 (Wed Dec 8 16:27:55 2004) AC ...

  6. 楼天城楼教主的acm心路历程(作为励志用)

    楼主个人博客:小杰博客 利用假期空暇之时,将这几年GCJ,ACM,TopCoder 參加的一些重要比赛作个 回顾.昨天是GCJ2006 的回顾,今天时间上更早一些吧,我如今还清晰记得3 年 前,我刚刚 ...

  7. 关于ACM,关于CSU

    原文地址:http://tieba.baidu.com/p/2432943599 前言: 即将进入研二,ACM的事情也渐渐远去,记忆终将模糊,但那段奋斗永远让人热血沸腾.开个贴讲讲ACM与中南的故事, ...

  8. 如何学习ACM

    我想对未来的同学有几句话要说: 1 我们几乎没有noi上来的队员,大家只能依靠后期的更加刻苦的努力. 2 我们没有专业的班级或者机制形成职业ACM队伍,所以大家只能尽早的投入进来,用尽一切课余时间去训 ...

  9. ACM退役记&&回忆录

    ACM退役记 2017.9.19星期二,"九一八事变"八十六年后的第二天,永远记住这个日子,刚好是我报名ACM到现在,刚好满一年,而今天正是我注册杭州电子科技大学OJ的时间(就是这 ...

随机推荐

  1. 穿越雷区--蓝桥杯--DFS/BFS

    题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? ...

  2. 关于程序状态字寄存器PSW(Program Status Word)与多核多线程

    内核态(Kernel Mode)与用户态(User Mode) CPU通常有两种工作模式即:内核态和用户态,而在PSW中有一个二进制位控制这两种模式. 内核态:当CPU运行在内核态时,程序可以访问所有 ...

  3. word无法切换中文输入法的解决方法

    问题: 在word编辑文字的时候,莫名其妙地出现只能输入英文字母无法输入中文的现象,输入法状态条也不显示,而输入法是正常的(在其他编辑器中可正常输入汉字) 解决方法如下:word 2003:菜单工具- ...

  4. git 常用命令记录 -- 快捷&备忘

    1.安装 略2.git拉取远程分支 git config user.name git config user.email git config --global user.name xxxx git ...

  5. mybatis typealias 问题

    最近在学mybatis  在一个简单的问题上却花了挺长时间 网上也没发现有类似的案例 故记录一下 在configuration里面 typealias 和 properties 同时用会出错 具体原因 ...

  6. 1.requests+正则表达式爬猫眼电影TOP100

    import requests from requests.exceptions import RequestException def get_one_page(url):try: response ...

  7. C++11并发编程2------线程管理

    本节内容: 启动一个线程 每个程序都至少会有一个线程,main函数是执行入口,我们称之为主线程,其余子线程有各自的入口函数,主线程和子线程同时运行.子线程在std::thread对象创建时启动. 1. ...

  8. Python 爬取 北京市政府首都之窗信件列表-[信息展示]

    日期:2020.01.25 博客期:133 星期六 [代码说明,如果要使用此页代码,必须在本博客页面评论区给予说明] //博客总体说明 1.准备工作 2.爬取工作 3.数据处理 4.信息展示(本期博客 ...

  9. 网站seo优化教你如何引蜘蛛爬行网站

    1. 网站和页面的权重 这个是咱们都知道的,网站和页面的权重越高的话,蜘蛛一般会匍匐的越深,被蜘蛛录入的页面也更多一些.可是一个新的网站,权重到达1的话是相对简单的,可是假如想要把权重再网上添加则会越 ...

  10. 一、java基础-数据类型_数据类型转化_字符编码_转义字符

    1.Java  支持的8种基本数据类型: java的四种整数数据类型:byte 1    short 2     int4     long8   byte     8位带符号整数 -128到127之 ...