| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1205 人关注过本帖
标题:窃贼问题,但是写出来系统提示越界了0.0,请教
取消只看楼主 加入收藏
卜算子
Rank: 1
等 级:新手上路
帖 子:86
专家分:8
注 册:2016-9-18
结帖率:82.35%
收藏
已结贴  问题点数:20 回复次数:1 
窃贼问题,但是写出来系统提示越界了0.0,请教
窃贼问题:
一个小偷背包最多装8公斤物品,
物品1:6 48(价值)
物品2:5 40
物品3:2 12
物品4:1 8
物品5:1 7
求拿到物品最大价值的方案
以下是代码
#include <stdio.h>
#define N 5
void ss(int *a,int i,int *b,int *p,int x,int max,int l)
{
int m[N],t[N],o[N],j;//m[N],用来接收重量。t[N],储存方案。o[N]价值,j贮存上一次价值总和//
for(j=0;j<N;j++)
{
   m[N]=*b++;
}
for(j=0;j<N;j++)
{
   o[N]=*p++;
}
for(j=0;j<N;j++)
{
  t[j]=*a++;
}
t[i]=m[i];//增加方案//
max+=o[i];//价值增长//
x+=t[i];//重量增长//
    if(x>8&&i<N)
{
t[i]=0;
max-=o[i];
i++;
ss(t,i,m,o,x,max,l);//递归调用//
}
    else if(x<8&&i<N)//增加元素//
    {
        ss(t,i,m,o,x,max,l);
    }

    else if(x==8&&i<N)
    {
        if(j>max&&i<(N-1))
        {
            t[i]=0;
            max-=o[i];
            ss(t,i,m,o,x,max,l);
         }
         else if(i==(N-1))
        {
            printf("%d",t[i]);//输出方案//
            printf("%d",max);//输出最大价值//
        }
    }
    j=max;
}
main()
{
    int i,max,q[N],p[N],m[N],x,l;
    max=0;   
    x=0;
    l=0;
    printf("输入小偷可选择物品重量\n");
    for(i=0;i<N;i++)
    {
   
    scanf("%d",&m[i]);
}//输入可选重量//
    for(i=0;i<N;i++)
    {
        q[i]=0;
    }//将集合全部归零//
    printf("请输入对应价值\n");
    for(i=0;i<N;i++)
    {
   
        scanf("%d",&p[N]);
    }    //输入可选价值//
    i=0;
    ss(q,i,m,p,x,max,l);
}

[此贴子已经被作者于2016-12-7 19:13编辑过]


岂曰无衣,与子同袍!
2016-12-07 19:01
卜算子
Rank: 1
等 级:新手上路
帖 子:86
专家分:8
注 册:2016-9-18
收藏
得分:0 
回复 4楼 九转星河
对哦,谢谢

岂曰无衣,与子同袍!
2016-12-08 08:43
快速回复:窃贼问题,但是写出来系统提示越界了0.0,请教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017725 second(s), 9 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved