zoukankan      html  css  js  c++  java
  • 背包问题选中递归求解0 1背包问题

    发一下牢骚和主题无关:

        递归函数就是直接或直接调用自身的函数。

        

        

    递归式:

        

        当wn>C时,  f(n,C)=f(n-1,C);

        

        当wn<=C时,f(n,C) = max(f(n-1,C), vn+f(n-1, C-wn) );

        

        初始条件为:f(i, 0) = 0; f(0,i) = 0; f(0,0) = 0;

        每日一道理
    “一年之计在于春”,十几岁的年纪,正是人生的春天,别辜负了岁月老人的厚爱与恩赐。行动起来,播种梦想吧!

        

     

    #include <stdio.h>
    
    #define MAX 100
    
    int weight[MAX];
    int price[MAX];
    int y[MAX]={0};
    
    //停止递归重要方法
    int f(int t,int c){
    	if((t==0)||c==0){  //当物品个数为0或背包容积为0事退出
    	  return 0;
    	}else{
    		for(int i=t-1;i>=0;i--){  
    			if(weight[i]>c){  //当物品重量大于背包容积
    				y[i]=0;  //此时物品不被选中
    				return f(t-1,c);  //在剩余物品中选取
    			}else{
    			int	temp1=f(t-1,c); //当第t个物品没被选中时
    			int	temp2=price[i]+f(t-1,c-weight[i]);//被选中时
    				if(temp1>temp2){
    					y[i]=0;
    					return temp1;
    				}else{
    					y[i]=1;
    					return temp2;
    				}
    			}
    		}
    	}
    }
    int main(){
        int c,t,maxval,i;
    	printf("请输入物品的的个数:");
    	scanf("%d",&t);
    	for(i=0;i<t;i++){
    		printf("\n请输入第%d个物品的重量和代价",i+1);
    		scanf("%d%d",&weight[i],&price[i]);
    	}
    	printf("\n请输入背包的容积");
    	scanf("%d",&c);
        maxval=f(t,c);
       	printf("j结果为:1代表选中");
    	for(i=0;i<t;i++){
    		//if(y[i]==1)
    			printf("\n%d %d %d\n",y[i],weight[i],price[i]);
    	}
    	printf("总代价为:%d",maxval);
        return 0;
    }

        背包问题和选中

        可见代价和是正确的,但是对应下标不正确,希望大家有谁可以帮忙指出犯错哪里??

    文章结束给大家分享下程序员的一些笑话语录: 问路
    有一个驾驶热气球的人发现他迷路了。他降低了飞行的高度,并认出了地面 上的一个人。他继续下降高度并对着那个人大叫,“打扰一下,你能告诉我我 在哪吗?”
    下面那个人说:“是的。你在热气球里啊,盘旋在 30 英尺的空中”。
    热气球上的人说:“你一定是在 IT 部门做技术工作”。
    “没错”,地面上的人说到,“你是怎么知道的?”
    “呵呵”,热气球上的人说,“你告诉我的每件事在技术上都是对的,但对都没 有用”。
    地面上的人说,“你一定是管理层的人”。
    “没错”,热气球上的人说,“可是你是怎么知道的?”
    “呵呵”,地面上的那人说到,“你不知道你在哪里,你也不知道你要去哪,你 总希望我能帮你。你现在和我们刚见面时还在原来那个地方,但现在却是我 错了”。

    --------------------------------- 原创文章 By
    背包问题和选中
    ---------------------------------

  • 相关阅读:
    [HNOI2013]切糕
    [POI2015]Kinoman
    「NOI2014」动物园
    [ZJOI2006]书架
    [HEOI2015]定价
    bzoj1833 数字计数
    bzoj2565 最长双回文子串
    bzoj4198 荷马史诗
    bzoj1193 马步距离
    bzoj3329 Xorequ
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3098984.html
Copyright © 2011-2022 走看看