uva812(暴力)

题意:

先给出有几叠商品,然后每叠商品有几个,从上到下的价格是多少;

每一个商品不管你买了多少钱,卖出去都是10块;

现在有个规定,你只能从上往下买商品,要想买下面的商品,就要把它上面的全买了;

问最大利润是多少;还有要买几个商品.如果买的商品数量不同,但都能达到最大利润,就从小到大输出,超过10个,输出最少的10个;

思路:

首先直接遍历算出每一叠所能达到的最大值,已经达到最大值的商品数有哪些;

然后每个最大值相加就是最大利润;

把每一叠能达到最大值的商品个数dfs()算出所有情况;

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<set>
using namespace std;

int prul[55][25];
int ways[55][25];
int len[55];
int w,b,sum,Max,cur;
priority_queue<int, vector<int>, greater<int> > q;
set<int> s;

void dfs(int cur,int sum) {
	if(cur == w) {
		if(!s.count(sum)) {
			s.insert(sum);
			q.push(sum);
		}
		return;
	}
	for(int i = 1; i <= len[cur]; i++) {
		dfs(cur + 1, sum + ways[cur][i]);
	}
}
int main() {
	int cas = 0;
	while(scanf("%d",&w) && w) {
		while(!q.empty())
			q.pop();
		s.clear();
		sum = 0;
		memset(len, 0,sizeof(len));
		for(int i = 0; i < w; i++) {
			Max = 0;
			cur = 0;
			scanf("%d",&b);
			len[i] = 1;
			ways[i][len[i]] = 0;
			for(int j = 0 ;j < b;j++) {
				scanf("%d",&prul[i][j]);
				cur += (10 - prul[i][j]);
				if(cur > Max) {
					Max = cur;
					len[i] = 1;
					ways[i][len[i]] = j + 1;
				}else if(cur == Max) {
					len[i]++;
					ways[i][len[i]] = j + 1;
				}
			}
			sum += Max;
		}
		dfs(0,0);
		if(cas)
			printf("\n");
		printf("Workyards %d\n",++cas);
		printf("Maximum profit is %d.\n",sum);
		printf("Number of pruls to buy:");
		for(int i = 0 ; i < 10; i++) {
			if(q.empty())
				break;
			printf(" %d",q.top());
			q.pop();
		}
		printf("\n");
	}
	return 0;
}
时间: 2024-11-02 23:36:13

uva812(暴力)的相关文章

二叉树的后序遍历(暴力版) 小白菜oj 1034

给出二叉树的前序遍历和中序遍历,求二叉树的后序遍历-- 作为一个搜索蒟蒻,我真的没有办法很和谐的A掉,但估计过几天就会写有关这个题的和谐的解法--但只是估计-- 下面讲述我的超暴力解法-- 首先,先由前序遍历得到一个父亲节点,然后再由中序遍历得到这个父亲节点的左子树和右子树中的元素(中序遍历中,该点的左边的所有点,都在它的左子树,右边的都在它的右子树,子树中的根节点是在这些节点的前序遍历中排名最靠前的),然后递归建树,之后在递归求后序遍历即可. 但这个方法有两个比较--&¥--&的问题:1

玲珑杯 round18 A 计算几何瞎暴力

题目链接 : http://www.ifrog.cc/acm/problem/1143 当时没看到坐标的数据范围= =看到讨论才意识到,不同的坐标最多只有1k多个,完全可以暴力做法,不过也要一些技巧. 首先注意数很大可能爆int,用LL得话注意强制转换或者全设为LL,假如  int a=50000,b=a;  LL sum=a*b; 则会爆出,除非ab都是LL 或者 sum=(LL)a*(LL)b; 还有就是R最大就是30,我们不妨设ans[i]表示R<=i的组合个数,做一个前缀和方便快速询问.

Vijos P1066 弱弱的战壕【多解,线段树,暴力,树状数组】

弱弱的战壕 描述 永恒和mx正在玩一个即时战略游戏,名字嘛~~~~~~恕本人记性不好,忘了-_-b. mx在他的基地附近建立了n个战壕,每个战壕都是一个独立的作战单位,射程可以达到无限(“mx不赢定了?!?”永恒[email protected][email protected]). 但是,战壕有一个弱点,就是只能攻击它的左下方,说白了就是横纵坐标都不大于它的点(mx:“我的战壕为什么这么菜”ToT).这样,永恒就可以从别的地方进攻摧毁战壕,从而消灭mx的部队. 战壕都有一个保护范围,同它的攻击

A. The Fault in Our Cubes 暴力dfs

http://codeforces.com/gym/101257/problem/A 把它固定在(0,0, 0)到(2, 2, 2)上,每次都暴力dfs检查,不会超时的,因为规定在这个空间上,一不行,就会早早退出. 这样写起来比较好写. #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <algorithm> #include <

HDU 5690 All X 暴力循环节

分析:暴力找循环节就好了 #include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <string> #include <stack> #include <vector> #include <map> #include <queue> #inc

Codeforces Round #281 (Div. 2) A. Vasya and Football 暴力

A. Vasya and Football Vasya has started watching football games. He has learned that for some fouls the players receive yellow cards, and for some fouls they receive red cards. A player who receives the second yellow card automatically receives a red

防止ssh暴力破解linux密码

网上看到一篇安全方面的文章,常用的网站收藏无法收藏,于是放这里先.具体功能还未测试,请慎用. 下面是博客原文转载,感谢作者辛苦劳动: 服务器在互联网中,每天都有些没事儿干的人在你的机器端口扫来扫去,让管理员非常烦恼.本文描述一个方法,利用本文介绍的脚本结合iptables服务一并使用,用来防止公网计算机通过ssh进行用户口令暴力破解.目前稳重脚本已经在其他项目的实际运营环境中得到验证. 脚本内容: #!/bin/bash # 防SSH密码暴力破解脚本 # 通过分析secure日志文件使用ipta

HDOJ 4687 Boke and Tsukkomi 一般图最大匹配带花树+暴力

一般图最大匹配带花树+暴力: 先算最大匹配 C1 在枚举每一条边,去掉和这条边两个端点有关的边.....再跑Edmonds得到匹配C2 如果C2+2==C1则这条边再某个最大匹配中 Boke and Tsukkomi Time Limit: 3000/3000 MS (Java/Others)    Memory Limit: 102400/102400 K (Java/Others) Total Submission(s): 649    Accepted Submission(s): 202

HDU 4749 Parade Show(暴力水果)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4749 Problem Description 2013 is the 60 anniversary of Nanjing University of Science and Technology, and today happens to be the anniversary date. On this happy festival, school authority hopes that the