uva812(暴力)
来源:互联网 发布:spring源码 事务 编辑:程序博客网 时间:2024/05/01 23:33
题意:
先给出有几叠商品,然后每叠商品有几个,从上到下的价格是多少;
每一个商品不管你买了多少钱,卖出去都是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;}
0 0
- uva812(暴力)
- UVA812-Trade on Verweggistan(暴力)
- 暴力??
- 暴力
- 暴力
- 暴力
- 暴力
- 暴力
- CSU 1538 暴力暴力暴力
- hdu6152暴力暴力!!!
- 很黄很暴力
- 《暴力街区》
- 暴力关机
- 暴力破解
- 暴力反射
- zoj4710暴力
- HDU4737(暴力)
- 冷暴力
- 求数组的子数组之和的最大值
- static函数与普通函数
- uva 669(贪心)
- C++ explicit关键字应用方法详解
- ORACLE SEQUENCE 详解
- uva812(暴力)
- 最小背包
- NS3实例分析(3)-- second.cc
- Zend Framework2 - TableGateway操作多个数据表(Multiple Table)
- 面试题15链表中倒数第k个结点
- 【MySQL基础】MySQL优化汇总
- NDK编译 Android库小记
- Qt、Vc下用fopen打开中文名字的文件
- js面向对象学习笔记之二(debug调试方法)