poj 1170 Shopping Offers

原创 2012年03月22日 22:21:30

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

题目大意:完全背包。

#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)
{
    if(b==-1)
    return a;
	return a<b?a:b;
}
int dp[6][6][6][6][6];
int num[150][6];
int hash[1000];
int N[6];
int val[150];
int n,i,c,p,k,m,t;
int main()
{
    scanf("%d",&n);
    int v1,v2,v3,v4,v5;
    for(i=1;i<=n;i++)
    {
        scanf("%d%d%d",&c,&k,&p);
        hash[c]=i;
        num[i][i]=1;
        val[i]=p;
        N[i]=k;
    }
    scanf("%d",&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&c,&k);
            num[i+n][hash[c]]=k;
        }
        scanf("%d",&val[i+n]);
    }
 //   system("pause");
    memset(dp,-1,sizeof(dp));
    dp[0][0][0][0][0]=0;
    for(i=1;i<=n+m;i++)
    {
        for(v1=0;v1<=N[1];v1++)
            for(v2=0;v2<=N[2];v2++)
                for(v3=0;v3<=N[3];v3++)
                    for(v4=0;v4<=N[4];v4++)
                        for(v5=0;v5<=N[5];v5++)
                        {
                            if(dp[v1][v2][v3][v4][v5]!=-1)
                            {
                                if(v1+num[i][1]<=N[1]&&v2+num[i][2]<=N[2]&&v3+num[i][3]<=N[3]&&v4+num[i][4]<=N[4]&&v5+num[i][5]<=N[5])
                                {
                                    dp[v1+num[i][1]][v2+num[i][2]][v3+num[i][3]][v4+num[i][4]][v5+num[i][5]]=
                                    min(dp[v1][v2][v3][v4][v5]+val[i],dp[v1+num[i][1]][v2+num[i][2]][v3+num[i][3]][v4+num[i][4]][v5+num[i][5]]);
                                }
                            }
                        }
    }
    printf("%d\n",dp[N[1]][N[2]][N[3]][N[4]][N[5]]);
}


 

POJ 1170 Shopping Offers -- 动态规划(虐心的六重循环啊!!!)

题目地址:http://poj.org/problem?id=1170 Description In a shop each kind of product has a price. For...
  • JDPlus
  • JDPlus
  • 2014年02月24日 16:10
  • 1808

状态压缩DP poj 1170 Shopping Offers 经典题目

#include #include #include using namespace std; const int M=6; const int inf=20000; /* 这个题太妙了,...

POJ 1170 Shopping Offers (状压DP)

首先确定dp的状态是购买当前这些物品所需要的最小价值,显然对于每个打折方案,都可以到达一个其他状态,也当前物品就是加上那个方案新买的物品,并获得一个新价值。用这个新价值去更新新状态,就是一个典型的完全...

poj 1170 Shopping Offers 动态规划绝对经典题目

题目为POJ 1170题目链接:http://poj.org/problem?id=1170 #include #include #include using namespace std...

POJ 1170 Shopping Offers 状态压缩dp+完全背包

题意: 有n种物品需要你去购买,每种物品购买num【i】个。(1 ) 当然提供s种优惠:购买商家规定的组合商品的价格为 s【i】 2 7 3 2 8 2 5 2 1 7 3 5 2 7 1 ...

Poj 1170 Shopping Offers dp背包

题目链接:http://poj.org/problem?id=1170 题目大意:

Hrbust 2099/Poj 1170 Shopping Offers【离散化+Dp】

Shopping Offers Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5114  ...

POJ 1170 Shopping Offers

题目链接:http://poj.org/problem?id=1170 ———————————————————————————————————————————— 题目思路: 基本的五维背包,把数...

POJ 1170 Shopping Offers 6进制压缩状态+完全背包

题意:有n(n           问买到所有物品的最少花多少钱。 题解:因为n和num很小,所以想到n维dp,但是不好处理,想到用6进制6位表示状态,然后对每种促销方案做完全背包就好了。 ...

状压dp-poj-1170-Shopping Offers

题目链接: http://poj.org/problem?id=1170 题目意思: 购物车里有b种(0= 解题思路: 离散化+状态压缩dp+背包。 因为总的物品种数最多只有5种,而且...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj 1170 Shopping Offers
举报原因:
原因补充:

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