购物计算c语言编程,[蓝桥杯][算法提高VIP]促销购物 (C语言代码)--------------C语言——菜鸟级...

解题思路: 动态规划  完全背包 变形

注意事项:

参考代码:#include

#include

long int bj(long int a,long int b)

{ return a

}

int main()

{ long int s,i,j,j1,b,ans=0,dans=0,b1,b2,b3,b4,b5;

long int sn[101];//sn[i]第i种促销种类的物品数

long int c[101][7],k[101][7],p[101],xc[7]={0},xp[7]={0},xk[7]={0};

//促销种类的商品序号,数量,总价 //需求商品序号,单价,数量

long int dp[6][6][6][6][6];//dp[2][3][4][1][0]代表 当前第 1~5 个物品 分别 购2 3 4 1 0 件所需最少钱

long h[6]={0};//h[i] 表示 i 号商品促销数量

long sbh[1001]={0};//标号表 链接 促销序号和需买序号的桥梁

scanf("%ld",&s);

for(i=1;i<=s;i++)

{

scanf("%ld",&sn[i]);

for(j=1;j<=sn[i];j++)

scanf("%ld%ld",&c[i][j],&k[i][j]);

scanf("%ld",&p[i]);

}

scanf("%ld",&b);

for(i=1;i<=b;i++)

scanf("%ld%ld%ld",&xc[i],&xk[i],&xp[i]);

for(j=1;j<=b;j++)//初始化需求物品的数量 sbh[i] 代表需求品序号 存 需求数量

sbh[xc[j]]=j;

for(b1=0;b1<=xk[1];b1++)

for(b2=0;b2<=xk[2];b2++)

for(b3=0;b3<=xk[3];b3++)

for(b4=0;b4<=xk[4];b4++)

for(b5=0;b5<=xk[5];b5++)

if(b1*xp[1]+b2*xp[2]+b3*xp[3]+b4*xp[4]+b5*xp[5])dp[b1][b2][b3][b4][b5]=b1*xp[1]+b2*xp[2]+b3*xp[3]+b4*xp[4]+b5*xp[5];

dp[0][0][0][0][0]=0; //初始化 原价购买

for(i=1;i<=s;i++)

{

for(j=1;j<=sn[i];j++)

if(xk[sbh[c[i][j]]]

if(j

for(j=1;j<=sn[i];j++)

h[sbh[c[i][j]]]=k[i][j];

for(b1=h[1];b1<=xk[1];b1++)

for(b2=h[2];b2<=xk[2];b2++)

for(b3=h[3];b3<=xk[3];b3++)

for(b4=h[4];b4<=xk[4];b4++)

for(b5=h[5];b5<=xk[5];b5++)

dp[b1][b2][b3][b4][b5]=bj(dp[b1][b2][b3][b4][b5],dp[b1-h[1]][b2-h[2]][b3-h[3]][b4-h[4]][b5-h[5]]+p[i]);

for(j=1;j<=sn[i];j++)

h[sbh[c[i][j]]]=0;

}

ans=dp[xk[1]][xk[2]][xk[3]][xk[4]][xk[5]];

printf("%ld\n",ans);

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值