您的位置:首页 > 其它

动态规划+背包问题

2013-05-18 12:49 288 查看
公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。

程序输入:

第一行是一个整数m,代表可购买的商品的种类数。

接下来是m个整数,每个1行,分别代表这m种商品的单价(0<m<1000)。

程序输出:

第一行是一个整数,表示共有多少种方案

第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空格分隔。

例如:

输入:

2

200

300

则应输出:

2

2 2

5 0

输入:

2

500

800

则应输出:

1

2 0

输入:

1

999

则应输出:

0

多个方案间的顺序不重要。

int m; //商品数量

int price[100]; //每件商品价格

int shu[100];

int amount[1000][100]; //存放可能的购买方案

int row=0;

void f(int money,int n)

{

if(n>=m) //购买品种超过商品品种

return;

if(money<=0)

{

if(money==0)

{

for(int i=0;i<m;i++)

amount[row][i] = shu[i];

row++;

}

return;

}

money -=price
;

shu
++;

f(money,n); //继续购买此商品

shu
--; //此商品件数加1

money+=price
;

f(money,n+1);

}

void output()

{

printf("%d\n",row);

for(int i=0;i<row;i++)

{

for(int j=0;j<m;j++)

printf("%d ",amount[i][j]);

printf("\n");

}

}

int main()

{

scanf("%d",&m);

for(int i=0;i<m;i++)

scanf("%d",&price[i]);

f(1000,0);

output();

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: