2 条题解
-
0
by hansang:
#include<bits/stdc++.h> using namespace std; const int N=45, M=1620; int a[N], f[2][M][M]; bool pd(int i, int j, int k){ if(i+j<=k || abs(i-j)>=k) return 0; if(i+k<=j || abs(i-k)>=j) return 0; if(j+k<=i || abs(k-j)>=i) return 0; if((i<=0) || (j<=0) || (k<=0)) return 0; return 1; } double calc(double i, double j, double k){ double p=(i+j+k)/2; double res=sqrt(p*(p-i)*(p-j)*(p-k))*100.0; return res; } int main(){ int n, sum=0; scanf("%d", &n); for(int i=1; i<=n; i++){ scanf("%d", &a[i]); sum+=a[i]; } double ans=0; memset(f, 0, sizeof(f)); f[0][0][0]=1; for(int i=1; i<=n; i++){ for(int j=0; j<=sum/2; j++){ for(int k=0; k<=sum/2; k++) if(f[(i-1)&1][j][k]){ f[i&1][j+a[i]][k]=1; f[i&1][j][k+a[i]]=1; f[i&1][j][k]=1; int t=sum-k-j-a[i]; if(pd(j+a[i], k, t)) ans=max(ans, calc(j+a[i], k, t)); if(pd(j, k+a[i], t)) ans=max(ans, calc(j, k+a[i], t)); } } } printf("%d\n", (!ans)? -1: (int)ans); return 0; } -
0
by hansang:
#include<bits/stdc++.h> using namespace std; const int N=45, M=1620; int a[N], f[2][M][M]; bool pd(int i, int j, int k){ if(i+j<=k || abs(i-j)>=k) return 0; if(i+k<=j || abs(i-k)>=j) return 0; if(j+k<=i || abs(k-j)>=i) return 0; if((i<=0) || (j<=0) || (k<=0)) return 0; return 1; } double calc(double i, double j, double k){ double p=(i+j+k)/2; double res=sqrt(p*(p-i)*(p-j)*(p-k))*100.0; return res; } int main(){ int n, sum=0; scanf("%d", &n); for(int i=1; i<=n; i++){ scanf("%d", &a[i]); sum+=a[i]; } double ans=0; memset(f, 0, sizeof(f)); f[0][0][0]=1; for(int i=1; i<=n; i++){ for(int j=0; j<=sum/2; j++){ for(int k=0; k<=sum/2; k++) if(f[(i-1)&1][j][k]){ f[i&1][j+a[i]][k]=1; f[i&1][j][k+a[i]]=1; f[i&1][j][k]=1; int t=sum-k-j-a[i]; if(pd(j+a[i], k, t)) ans=max(ans, calc(j+a[i], k, t)); if(pd(j, k+a[i], t)) ans=max(ans, calc(j, k+a[i], t)); } } } printf("%d\n", (!ans)? -1: (int)ans); return 0; }
- 1
信息
- ID
- 2309
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 8
- 标签
- 递交数
- 26
- 已通过
- 6
- 上传者