pku 1014

本文提供了一种解决物品分配问题的方法,通过C++编程实现了一个判断是否可以将一组物品平均分为两组的算法。该算法考虑了不同数量的物品及其价值,并通过递归方式检查所有可能的组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Source Code

Problem: 1014 User: cug_fish2008
Memory: 204K Time: 0MS
Language: C++ Result: Accepted
  • Source Code
    #include <stdio.h>
    
    bool fun(int sum,int w[]);
    int main()
    {
    	int c[7],n=1;
    	int sum=0;
    	for(int i=1;i<7;i++){
    		scanf("%d",&c[i]);
    		c[i]%=30;
    		sum+=c[i]*i;}
    	while(c[1] || c[2] || c[3] ||
    		c[4] || c[5] || c[6]){
    		printf("Collection #%d:/n",n);
    		if(sum%2==0 && fun(sum/2,c))
    			printf("Can be divided./n/n");
    		else printf("Can't be divided./n/n");
    		n++;
    		sum=0;
    		for(int i=1;i<7;i++){
    			scanf("%d",&c[i]);
    			c[i]%=30;
    			sum+=c[i]*i;}
    	}
    	return 0;
    }
    bool fun(int sum,int w[])
    {
    	int sm=0;
    	for(int a=0;a<=w[6];a++){
    		sm+=a*6;
    		if(sm>sum)return false;
    		if(sm==sum)return true;
    		for(int b=0;b<=w[5];b++){
    			sm+=b*5;
    			if(sm>sum){sm-=b*5;break;}
    			if(sm==sum)return true;
    			for(int c=0;c<=w[4];c++){
    				sm+=c*4;
    				if(sm>sum){sm-=c*4;break;}
    				if(sm==sum)return true;
    				for(int d=0;d<=w[3];d++){
    					sm+=d*3;
    					if(sm>sum){sm-=d*3;break;}
    					if(sm==sum)return true;
    					for(int e=0;e<=w[2];e++){
    						sm+=e*2;
    						if(sm>sum){sm-=e*2;break;}
    						if(sum-sm<=w[1])return true;
    						sm-=e*2;
    					}
    					sm-=d*3;
    				}
    				sm-=c*4;
    			}
    			sm-=b*5;
    		}
    	}
    	return false;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值