hdu6298 Maximum Multiple
题意:
给你一个整数n,从中找出可以被n整除的三个数x,y,z;
要求x+y+z=n,且x*y*z最大。
思路:
开始一看T到1e6,n也到1e6,就想到打表,可是打表就只输出最大值
没有把取的那三个数也数出来,纠结了许久。
正解就是设a=n/x,b=n/y,c=n/z;
则1/a+1/b+1/c=1;
则abc可取3,3,3;2,3,6;2,4,4
代码:
#includeusing namespace std;#define N 100typedef long long ll;/*int main(){ int m; while(cin>>m) { for(int n=1;n<=m;n++){ long long ans=-1; int a=0,b=0,c=0; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { for(int k=1;k<=n;k++) { if(n%i==0&&n%j==0&&n%k==0&&i+j+k==n) { long long tmp=i*j*k; if(ans >T; while(T--){ cin>>n; ll ans=-1; ll x,y,z; if(n%2==0) { x=n/2,y=n/3,z=n/6; if(x+y+z==n&&x*y*z>ans) ans=x*y*z; x=n/2,y=n/4,z=n/4; if(x+y+z==n&&x*y*z>ans) ans=x*y*z; } if(n%3==0){ x=n/3,y=n/3,z=n/3; if(x+y+z==n&&x*y*z>ans) ans=x*y*z; } cout< <