poj 1293 Duty Free Shop

原创 2012年03月26日 21:38:16

题目链接:http://poj.org/problem?id=1293

题目大意:01背包,水题。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<string>
#include<queue>
#include<algorithm>
#include<vector>
#include<stack>
#include<list>
#include<iostream>
#include<map>
using namespace std;
#define inf 0x3f3f3f3f
#define Max 110
int max(int a,int b)
{
	return a>b?a:b;
}
int min(int a,int b)
{
	return a<b?a:b;
}
int m,l,sum,n;
int dp[2010][1010];
int ans[2010];
int num[2010];
int main()
{
    int i,j;
    while(scanf("%d%d",&m,&l),m|l)
    {
        scanf("%d",&n);
       // memset(dp,0,sizeof(dp));
       memset(dp[0],0,sizeof(dp[0]));
        dp[0][0]=1;
        sum=0;
        for(i=1;i<=n;i++)
        {
            scanf("%d",&num[i]);
            sum+=num[i];
            for(j=0;j<=m;j++)
            {
                dp[i][j]=dp[i-1][j];
                if(j-num[i]>=0&&dp[i-1][j-num[i]]==1)
                {
                    dp[i][j]=1;
                }
            }
        }
        int rec;
        for(j=m;j>=0;j--)
        {
            if(dp[n][j])
            {
                rec=j;
                break;
            }
        }
       // printf("rec %d\n",rec);
        if(sum-rec>l)
        {
            printf("Impossible to distribute\n");
            continue;
        }
        int cnt=0;
       for(i=n;i>0;i--)
       {
            if(rec-num[i]>=0&&dp[i-1][rec-num[i]])
            {
                ans[cnt++]=i;
                rec-=num[i];
            }
       }
       printf("%d",cnt);
       for(i=cnt-1;i>=0;i--)
       {
            printf(" %d",ans[i]);
       }
       printf("\n");
    }
}


 

POJ 1293 Duty Free Shop

题意两种物品,放到n个盒子,要求所有盒子放满,且每个盒子只有一种物品,物品可以有剩余分析将盒子视为物品,第一种物品为背包大小,进行DP并且记录路径,回溯可得放第一种物品的最优方案(目的是为了是放第二种...
  • D042412
  • D042412
  • 2015年07月16日 19:40
  • 382

poj 1293 Duty Free Shop

真可谓是wrong了一地, 如果有和我一样的,我可以提供点参考点。 我错的地方是, 没考虑到m可以一个都不放进盒子里    比如这组数据 1 10 5 2 2 2 2 2 这时m一个也...
  • purevegetable
  • purevegetable
  • 2014年03月20日 19:53
  • 634

Duty Free Shop - POJ 1293 dp

Duty Free Shop Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 1132   ...
  • u014733623
  • u014733623
  • 2014年08月25日 23:08
  • 476

POJ 1293 Duty Free Shop 笔记

两种巧克力分别有M个和L个。分到N个小袋,小袋 i 能盛Ci个巧克力,每小袋巧克力的种类相同,小袋必须盛满。求M个的巧克力分到了哪几个小袋。...
  • woniupengpeng
  • woniupengpeng
  • 2017年06月01日 19:37
  • 53

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

Description Pedro travelled to Europe to take part in the International Olympiad in Informatics an...
  • u013582254
  • u013582254
  • 2015年05月28日 22:21
  • 685

POJ - 1293 Duty Free Shop(01背包记录物品)

一开始不知道L是拿来干嘛的,后来才发现用于判断能不能全部装满的。一开始先贪心的用M装满尽可能大的空间,这里转化为01背包问题,然后再把剩下的盒子用L装,看看能不能装满。这里主要的难题...
  • lzc504603913
  • lzc504603913
  • 2017年08月16日 20:13
  • 62

POJ 1293 - Duty Free Shop 01背包记录所选物品

裸的01背包.dp[x]只要是bool型记录当前空间是否可用..     而为了找到用了哪些物品..dp[x]设置为int型..进行记录.. Program: #include #inc...
  • kk303
  • kk303
  • 2013年07月14日 09:48
  • 1275

zoj 1520 Duty Free Shop

题意:Pedro有2种巧克力分别有m块和 l块,现在他有n个巧克力盒子,他希望把这n个盒子全都填满,要求每种盒子中只能包含有一种巧克力,巧克力可以有剩余,如果能填满,就输出第一种巧克力用了多少个盒子,...
  • Iamallblue
  • Iamallblue
  • 2015年01月24日 16:18
  • 253

zoj 1520 - Duty Free Shop

题目:Pedro买了两块不同牌子的巧克力,他找到了一些小盒子,他准备把巧克力分开,放在小盒子里送给朋友;           为了不被朋友发现自己是为了省钱,每个小盒子中只能放相同牌子的巧克力,求分法...
  • mobius_strip
  • mobius_strip
  • 2014年09月14日 17:12
  • 845

poj1157 - LITTLE SHOP OF FLOWERS

题目意思:现在有F束花,V个花瓶,并且F 那么花i必须放在花j的左边,然后每一束花插到某一个瓶子是有一个美学价值的,而且每个花瓶只能插一束花,现在要你算出 怎么放,能够使美学价值最大 解题思...
  • wangjian8006
  • wangjian8006
  • 2013年05月23日 10:43
  • 1485
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 1293 Duty Free Shop
举报原因:
原因补充:

(最多只允许输入30个字)