网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月10日漏签0天
poj吧 关注:629贴子:2,270
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 2回复贴,共1页
<<返回poj吧
>0< 加载中...

帮忙纠正一下简单题目的逻辑错误(背包)回溯法

  • 只看楼主
  • 收藏

  • 回复
  • Andy刘德聪
  • 不慎WA
    4
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
我知道本吧大牛多,所以就进来打酱油了,你们要爱我噢。
原题:
公司发了某商店的购物券1000元,限定只能购买店中的m种商品。每种商品的价格分别为m1,m2,…,要求程序列出所有的正好能消费完该购物券的不同购物方法。
程序输入:
第一行是一个整数m,代表可购买的商品的种类数。
接下来是m个整数,每个1行,分别代表这m种商品的单价。
程序输出:
第一行是一个整数,表示共有多少种方案
第二行开始,每种方案占1行,表示对每种商品购买的数量,中间用空格分隔。
例如:
输入:
2
200
300
则应输出:
2
2 2
5 0
输入:
2
500
800
则应输出:
1
2 0
我的代码
#include"iostream"
using namespace std;
#define N 1000 //N存储总钱1000
int a[100],b[100][100]={0},n,p=1,q=1; //a数组存商品价格,b数组存商品数量 p,q为b数组下标
int dex[100]; //记录一种方案对应商品的数量
void DLS(int a[],int money)
{
int i,j;
for(i=1;i<=n;i++)
{
if((money+a[i])<=N)
{
if(N==(money+a[i])) //找到了一种方案;
{
dex[i]++;
for(j=1;j<=n;j++) //存一种方案下标
b[p][j]=dex[j];
p++;
}
else
{
money+=a[i];
dex[i]++;
DLS(a,money);
dex[i]--;
}
}
}
}
int main()
{
int i=0,j;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
DLS(a,0);
cout<<p-1<<endl; //总共有多少个方案
for(i=1;i<p;i++)
{
for(j=1;j<=n;j++)
cout<<b[i][j]<<" ";
cout<<endl;
}
return 0;
}


我想说的是。。这两个都不是我要的答案。。以下是我想使用回溯法推测,(如果推错了请指点)
输入 2
200
800
理论上应该有3中方案的。
1,200 200 200 200 200 200
2,200 800
800 200 输入 2 200 300 理论上应该有5种答案,
1 200 200 200 200 200
2,200 200 300 300
3,200 300 200 300
4 300 200 200 300
5 300 300 200 200
请大牛指点 小弟感激不尽,临表涕零。


  • limin85102922
  • 1000
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
以后我再也不回"顶","JF","sf"这样一点技术含量的没有的回帖了。。


2025-07-10 16:26:48
广告
  • jct傻子
  • 1000
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
sf


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 2回复贴,共1页
<<返回poj吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示