日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

购物打折C语言程序设计,算法提高 促销购物(动态规划+完全背包)-----------------C语言——菜鸟级...

發布時間:2024/1/1 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 购物打折C语言程序设计,算法提高 促销购物(动态规划+完全背包)-----------------C语言——菜鸟级... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述

張超來到了超市購物。

每個物品都有價格,正好趕上商店推出促銷方案。就是把許多東西一起買更便宜(保證優惠方案一定比原價便宜)。物品要買正好的個數,而且不能為了便宜而買不需要的物品。

張超拿到了優惠方案,和需要購買的物品清單,當然想求出最小的花費。他是信息學選手,自然地想到寫個程序解決問題。

輸入格式

第一行促銷物品的種類數(0 <= s <= 99)。

第二行..第s+1 行每一行都用幾個整數來表示一種促銷方式。

第一個整數 n (1 <= n <= 5),表示這種優惠方式由 n 種商品組成。

后面 n 對整數 c 和 k 表示 k (1 <= k <= 5)個編號為 c (1 <= c <= 999)的商品共同構成這種方案。

最后的整數 p 表示這種優惠的優惠價(1 <= p <= 9999)。也就是把當前的方案中的物品全買需要的價格。

第 s+2 行這行一個整數b (0 <= b <= 5),表示需要購買 b 種不同的商品。

第 s+3 行..第 s+b+2 行這 b 行中的每一行包括三個整數:c ,k ,和 p 。

C 表示唯一的商品編號(1 <= c <= 999),

k 表示需要購買的 c 商品的數量(1 <= k <= 5)。

p 表示 c 商品的原價(1 <= p <= 999)。

最多購買 5*5=25 個商品。

輸出格式

一個整數ans,表示需要花的最小費用

樣例輸入

2

1 7 3 5

2 7 1 8 2 10

2

7 3 2

8 2 5

樣例輸出

14

思路: 動態規劃 ?完全背包 變形

#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;

}

總結

以上是生活随笔為你收集整理的购物打折C语言程序设计,算法提高 促销购物(动态规划+完全背包)-----------------C语言——菜鸟级...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。