23 Out of 5

题目简述:
对5个给定的数,只使用+-*,这三种运算符使其计算结果为23,如果可以则输出Possible,否则输出Impossible


题目分析:

1.对于给定的5个数,需要找出所有可能的组合,即全排列,共5!种组合

2.对于给定的3种运算符,也需要给出所有可能的组合,共3^4种组合。


import java.util.Scanner;
public class Main 
{
	private final static int max = 5;
	private static boolean bool = false;
	private static int[] numbers = new int[max];
	private static Scanner s = new Scanner(System.in);
	public static void isYield23(int a[],int num,int sum)
	{
        if(num == 5)
        {
        	if(sum == 23)
        		bool = true;	
      	}
        else
        {
        	isYield23(a,num+1,sum+a[num]);
        	isYield23(a,num+1,sum-a[num]);
        	isYield23(a,num+1,sum*a[num]);
        }//All combinations of the three kinds of operators
	}
	public static void traversalNumbers(int a[],int num,int i)  
	{
	    if (i == num)
	    	isYield23(a,1,a[0]);
	    else
	        for (int k=i;k<num;k++) 
	        {
	            int tmp1 = a[i];
	            a[i] = a[k];
	            a[k] = tmp1;
	            traversalNumbers(a,num,i+1);
	            int tmp2 = a[i];
	            a[i] = a[k];
	            a[k] = tmp2;
	        }//All permutations of the five numbers
	}
	public static void main(String args[])
	{
		boolean flag = true;
		while(flag)
		{	
			int count = max;
			int index = 0;
			while(count!=0)
			{
				count--;
				numbers[index++] = s.nextInt();
			}
			if(numbers[0]==0&&numbers[1]==0&&
			numbers[2]==0&&numbers[3]==0&&numbers[4]==0)
			{
				flag = false;return;
				//Input is terminated by a line containing five zero's. 
			}
			else
				traversalNumbers(numbers,max,0);
			if(bool==true)
				System.out.println("Possible");
			else
				System.out.println("Impossible");
			bool = false;
		}
	}
}


### 解决方案概述 对于`CUDA out of memory`错误,通常发生在尝试分配超出可用显存资源的情况下。具体表现为试图分配256.00 MiB时遇到了限制(GPU0;总容量为23.70 GiB;已有844.99 MiB被占用;剩余自由空间仅186.44 MiB),这表明当前环境下的确存在明显的内存瓶颈[^1]。 #### 减少模型大小或批量处理尺寸 降低输入数据批次(batch size)或是简化神经网络结构能够有效减少所需显存量。较小规模的数据集每次迭代所需的计算量更少,从而降低了整体消耗。 #### 清理未使用的张量对象 确保及时释放不再需要的PyTorch Tensor实例,防止不必要的内存预留。可以通过调用`.detach()`方法断开反向传播路径,并利用Python垃圾回收机制清理这些变量。 #### 调整最大分割大小配置项 适当调整`PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:X`环境变量设置,其中X代表新的最大分片尺寸(MiB单位)。这样做有助于缓解由于频繁的小块申请所造成的碎片化现象,提高大块连续区域的成功率。 ```bash export PYTORCH_CUDA_ALLOC_CONF="max_split_size_mb:128" ``` #### 关闭其他占用GPU的应用程序 确认是否有其它正在运行并占用大量图形处理器资源的任务,比如后台训练作业或其他视觉密集型软件。关闭它们可以立即腾出更多可用空间给目标应用使用。 #### 使用混合精度训练(Half Precision Training) 采用FP16半精度浮点数代替默认的FP32全精度格式来进行前向与后向传递运算,可以在几乎不影响最终效果的前提下显著节省一半以上的存储需求。 ```python from torch.cuda import amp scaler = amp.GradScaler() for data, target in dataloader: optimizer.zero_grad() with amp.autocast(): output = model(data) loss = criterion(output, target) scaler.scale(loss).backward() scaler.step(optimizer) scaler.update() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值