题目要求大体是这样的:一个商店至多有五种商品,给出每种商品的编号和购买数量以及单价,然后给出几种打折方案,比如一件商品你买多件总价格会便宜一些或是你买特定的几种商品并且买特定的数量总价格也会减少。
背包问题,通过动归找到最优方案……~o( =∩ω∩= )m
代码在这:
/*poj1170shopping office*/
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int m,n,v;
int i,j;
int B; //商品种类数量
int c[1000]; //商品编号
int k[6]; //商品数量
int p[6]; //单品价格
int s; //优惠方案种类数量
int pay[6][6][6][6][6]; //最佳优惠方案总费用
int min(int a,int b)
{
     return a>b?b:a;
}
struct VIEW
{
	int q[6]; //优惠所需每种物品量
	int money; //优惠组合总价格
}view[101];
int dp(int a,int b,int c,int d,int e)
{
     int i;
	if(a<0||b<0||c<0||d<0||e<0) return 10000000;
	if(pay[a][b][c][d][e]>=0) return pay[a][b][c][d][e];
	pay[a][b][c][d][e]=a*p[1]+b*p[2]+c*p[3]+d*p[4]+e*p[5];
	for(i=1;i<=s;++i)
	{
		pay[a][b][c][d][e]=min(pay[a][b][c][d][e],view[i].money+dp(a-view[i].q[1],b-view[i].q[2],c-view[i].q[3],d-view[i].q[4],e-view[i].q[5]));
	}
	return pay[a][b][c][d][e];
}
int main()
{
     memset(pay,-1,sizeof(pay));
	scanf("%d",&B);
	for(i=1;i<=B;++i)
	{
		scanf("%d%d%d",&n,&k[i],&p[i]);
		c[n]=i;
	}
	scanf("%d",&s);
	for(i=1;i<=s;++i)
	{
		scanf("%d",&v);
		for(j=1;j<=v;++j)
		{
			scanf("%d%d",&n,&m);
			view[i].q[c[n]]=m;
		}
		scanf("%d",&view[i].money);
	}
	pay[0][0][0][0][0]=0;
	int res=dp(k[1],k[2],k[3],k[4],k[5]);
	printf("%d\n",res);
	return 0;
}
 
                   
                   
                   
                   本文介绍了一种使用动态规划解决购物折扣问题的方法。该问题包含商品编号、购买数量及单价等信息,并通过多种打折方案寻找最优解。文中提供了一个具体的C++实现示例。
本文介绍了一种使用动态规划解决购物折扣问题的方法。该问题包含商品编号、购买数量及单价等信息,并通过多种打折方案寻找最优解。文中提供了一个具体的C++实现示例。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   423
					423
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            