zoj 1520 - Duty Free Shop

题目:Pedro买了两块不同牌子的巧克力,他找到了一些小盒子,他准备把巧克力分开,放在小盒子里送给朋友;

为了不被朋友发现自己是为了省钱,每个小盒子中只能放相同牌子的巧克力,求分法。

分析:dp,01背包。

这里每个小盒子作为物品,其中第一块巧克力作为箱子,记录每个箱子的前驱(路径);

然后,枚举所有的第一块巧克力的可分状态,判断第二块巧克力是否可以装下剩下的小盒子;

找到合法的情况,逆序输出路径即可。

说明:当时zoj的第50道 dp O(∩_∩)O~

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

bool F[ 1001 ];
int  c[ 1001 ];
int  m[ 1001 ];

void print( int s, int d )
{
    if ( s > c[ m[ s ] ] ) {
        print( s-c[ m[ s ] ], d+1 );
        printf(" %d",m[ s ]);
    }else printf("%d %d",d,m[ s ]);
}

int main()
{
    int M,L,N;
    while ( scanf("%d%d",&M,&L) && (M+L) ) {
        scanf("%d",&N);
        int sum = 0;
        int mal = M+L;
        for ( int i = 1 ; i <= N ; ++ i ) {
            scanf("%d",&c[ i ]);
            sum += c[ i ];
        }

        memset( F, false, sizeof( F ) );
        F[ 0 ] = true;
        for ( int i = 1 ; i <= N ; ++ i )
        for ( int j = M ; j >= c[ i ] ; -- j )
            if ( F[ j-c[ i ] ] && !F[ j ] ) {
                F[ j ] = true;
                m[ j ] = i;
            }

        int space = -1;
        for ( int i = 0 ; i <= M ; ++ i )
            if ( F[ i ] && L >= sum-i ) {
                space = i;
                break;
            }

        if ( space != -1 ) {
            if ( space ) print( space, 1 );
            else printf("0");
        }else printf("Impossible to distribute");
        printf("\n");
    }
    return 0;
}
时间: 2024-10-06 12:42:39

zoj 1520 - Duty Free Shop的相关文章

poj 1293 Duty Free Shop

Duty Free Shop Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1145   Accepted: 452   Special Judge Description Pedro travelled to Europe to take part in the International Olympiad in Informatics and is coming back home. Since all his fr

POJ 1293 Duty Free Shop(背包记录路径)

Description Pedro travelled to Europe to take part in the International Olympiad in Informatics and is coming back home. Since all his friends asked him to bring them some gift, he bought two big bags of chocolates (one of Mindt and one of Lilka). Ea

zoj题目分类

饮水思源---zoj 转载自:http://bbs.sjtu.edu.cn/bbscon,board,ACMICPC,file,M.1084159773.A.html 注:所有不是太难的题都被归成了“简单题”,等到发现的时候已经太晚了,我太死脑筋 了……:( 有些题的程序我找不到了,555……:( SRbGa的题虽然都很经典……但是由于其中的大部分都是我看了oibh上的解题报告后做 的,所以就不写了…… 题目排列顺序没有规律……:( 按照个人感觉,最短路有的算做了DP,有的算做了图论. 有些比较

POJ百道水题列表

以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight Moves1101 Gamblers1204 Additive equations 1221 Risk1230 Legendary Pokemon1249 Pushing Boxes 1364 Machine Schedule1368 BOAT1406 Jungle Roads1411 Annive

poj 动态规划题目列表及总结

此文转载别人,希望自己能够做完这些题目! 1.POJ动态规划题目列表 容易:1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1208, 1276,1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740(博弈),1742, 1887, 1926(马尔科夫矩阵,求平衡), 1936, 1952, 1953, 1958, 1959, 1962, 1975,

DP题目列表/弟屁专题

声明: 1.这份列表不是我原创的,放到这里便于自己浏览和查找题目. ※最近更新:Poj斜率优化题目 1180,2018,3709 列表一:经典题目题号:容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740, 1742, 1887, 1926, 1936, 195

[转] POJ DP问题

列表一:经典题目题号:容易: 1018, 1050, 1083, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 1322, 1414, 1456, 1458, 1609, 1644, 1664, 1690, 1699, 1740, 1742, 1887, 1926, 1936, 1952, 1953, 1958, 1959, 1962, 1975, 1989, 2018, 2029, 2039, 2063, 20

English trip -- VC(情景课) 7 B Clothing 服装

xu言: 不要使用中式的思维去思考西方的语义!!!切记切记 words a tie   领带 a blouse  女士衬衣 a sweater  毛衣 a skirt  短裙 a jacket   夹克衫(一般还用于指上半身穿的衣服) a raincoat 雨衣 Duty Free Shop (简称:DFS)免税商店 tax   n. 税金:重负 freight  运费 sneakers    s nea kers  ['sni:k?z]   休闲鞋 Sentences How much is

HDU 1520 树形dp裸题

1.HDU 1520  Anniversary party 2.总结:第一道树形dp,有点纠结 题意:公司聚会,员工与直接上司不能同时来,求最大权值和 #include<iostream> #include<cstring> #include<cmath> #include<queue> #include<algorithm> #include<cstdio> #define max(a,b) a>b?a:b using nam