UVA - 812 Trade on Verweggistan dfs + 贪心

来源:互联网 发布:mac os qq截图 编辑:程序博客网 时间:2024/04/27 14:35

题目大意:有n堆东西,只能从上往下买,如果要买下面的东西,只能把上面的所有东西买了才可以,类似一个栈
每个东西都有价格,每个东西卖出去都只能卖10,问能卖的最大利润,和要卖多少个才能达到最大利润

解题思路:贪心的来说每个买了的都要卖出去,才能使得利润最大化,纪录每堆卖出最大利润的所有情况,然后用dfs一一枚举,要判重和排序输出
注意特例,都是0的情况
1
5 10 10 10 10 10
输出应该有0 1 2 3 4 5

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define maxn 60int w, price[maxn][25], sum, num[maxn], cnt, vis[2500],ans[2500];struct Max {    int cnt;    int M[25];    int num;}MAX[maxn];void init() {    int Max = 0, sum2;    sum = 0; cnt = 0;    memset(vis,0,sizeof(vis));    for(int i = 0; i < w; i++) {        scanf("%d", &num[i]);        sum += Max;        sum2 = Max = 0;        for(int j = 0; j < num[i]; j++) {            scanf("%d", &price[i][j]);            sum2 += 10 - price[i][j];            Max = max(Max, sum2);        }        MAX[i].num = Max;        MAX[i].cnt = 0;    }    sum += Max;    for(int i = 0; i < w; i++) {        sum2 = 0;        if(MAX[i].num == 0)            MAX[i].M[MAX[i].cnt++] = 0;        for(int j = 0; j < num[i]; j++) {            sum2 += 10 -price[i][j];            if(sum2 == MAX[i].num)                MAX[i].M[MAX[i].cnt++] = j + 1;        }    }}void dfs(int Sum, int cur) {    if(cur == w && !vis[Sum]) {        ans[cnt++] =  Sum;        vis[Sum] = 1;        return ;    }    for(int i = 0; i < MAX[cur].cnt; i++) {        Sum += MAX[cur].M[i];        dfs(Sum,cur+1);        Sum -= MAX[cur].M[i];    }}int main() {    int cas = 0;    while(scanf("%d", &w) == 1 && w) {        if(cas)            printf("\n");        init();        dfs(0,0);        sort(ans,ans+cnt);        printf("Workyards %d\n", ++cas);        printf("Maximum profit is %d.\n", sum);        printf("Number of pruls to buy:");                for(int i = 0; i < cnt && i < 10; i++)            printf(" %d", ans[i]);        printf("\n");    }    return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 理发店顾客钱收少了怎么办 淘宝店铺搜不到怎么办 淘宝客服不在线怎么办 淘宝售后服务客服帮着卖家怎么办 老公一年找不到工作怎么办 淘宝店家跑了怎么办 淘宝卖家跑了怎么办啊 没发货退不了怎么办 微信上遇到诈骗怎么办 拼多多二级处罚怎么办 淘宝售后过了怎么办 遇到耍无赖的人怎么办 欠钱耍无赖得怎么办 借钱不还耍无赖怎么办 淘宝开食品店证件怎么办 手机卡掉了话费怎么办 手机变板砖怎么办 10086短信收不到怎么办 苹果手机成砖头怎么办 手机死砖了怎么办 苹果电脑成砖了怎么办 苹果误充游戏怎么办 话费如果交错了怎么办 联通充错号码怎么办 淘宝店铺假流量怎么办 空号交错话费怎么办 微信上被骗4800怎么办 移动手机号空号怎么办 微信充值充错号码对方是空号怎么办 买了运险费退货怎么办 手机玩吃鸡有点卡怎么办 微信手机充值充到空号怎么办 用微信交话费交错了怎么办 眼睫毛烫坏了怎么办 眼睫毛太硬了怎么办 微信话费充值空号怎么办 睫毛烫焦了怎么办 答题卡中间对折怎么办 充q币错误怎么办 睫毛烫坏了怎么办 电话充错号码怎么办