蓝桥杯-最小乘积(java)
生活随笔
收集整理的這篇文章主要介紹了
蓝桥杯-最小乘积(java)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
算法訓練 最小乘積(基本型) 時間限制:1.0s 內存限制:512.0MB問題描述給兩組數,各n個。請調整每組數的排列順序,使得兩組數據相同下標元素對應相乘,然后相加的和最小。要求程序輸出這個最小值。例如兩組數分別為:1 3 -5和-2 4 1那么對應乘積取和的最小值應為:(-5) * 4 + 3 * (-2) + 1 * 1 = -25輸入格式第一個行一個數T表示數據組數。后面每組數據,先讀入一個n,接下來兩行每行n個數,每個數的絕對值小于等于1000。n<=8,T<=1000輸出格式一個數表示答案。樣例輸入231 3 -5-2 4 151 2 3 4 51 0 1 0 1樣例輸出-256
題目思路:最主要的邏輯是弄清楚,題目說和最小,其實就是第一行最小乘以第二行最大,第一行次小乘以第二行次大的和,弄清楚了這一點就迎刃而解了,當然為了減輕運算量,我們可以都從小到大排列,然后通過算法交叉相乘。
import java.util.Scanner; public class Main { public static void main(String[] args){ Scanner in=new Scanner(System.in); int Num=in.nextInt(); int i=0,j=0,k=0,c=0; int[] NumArr=new int[Num]; for(;c<Num;c++){ int m=in.nextInt();//每組數據中有m個元素 int[][] a=new int[2][m]; for(i=0;i<2;i++){ for(j=0;j<m;j++){ a[i][j]=in.nextInt(); } } int temp=0,sum=0; for(i=0;i<2;i++){ for(j=0;j<m-1;j++){ for(k=j;k<m;k++){ if(a[i][j]>a[i][k]){ temp=a[i][j]; a[i][j]=a[i][k]; a[i][k]=temp; } } } } for(j=0;j<m;j++){ sum+=(a[0][j]*a[1][m-j-1]); } NumArr[c]=sum; } for(c=0;c<Num;c++){System.out.println(NumArr[c]);} } }總結
以上是生活随笔為你收集整理的蓝桥杯-最小乘积(java)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯-关联矩阵(java)
- 下一篇: 蓝桥杯-01字串(java)