我有一個N*N
上三角矩陣的屬性,它的所有對角元素是a1,a2,a3,...,aN
。我想這a[i][j] (for all j>i)
應該如何提高C中矩陣運算的效率?
(a[i][j-1] + a[i+1][j])/2.
我有很多的測試情況下,我必須每天來計算答案時應用此屬性。什麼是最佳的方式來做到這一點,所以對於所有的測試用例來說,整體運行時間會更少?測試用例:輸入是N and a1,a2,...,aN
。
要算出答案,我需要做的:
a[0][0] + a[0][2] + ... + a[0][n-1] + a[2][n-1] + a[4][n-1] + ... + a[n-1][n-1].
我的解決方案(其中不斷得到超時):
#include<stdio.h>
double a[2000][2000];
int main(){
int test;
scanf("%d",&test);
//int arr[2000];
while(test--){
int n,i,j;
//scanf("%d",&n);
scanf("%d",&n);
for(i=0;i<n;i++){
int num;
scanf("%d",&num);
if(n!=1)
a[i][i] = num*0.5;
else
a[i][i] = num;
}
for(j=1;j<n;j++){
int k=j;
for(i=0;i<n-j;i++,k++){
if(i==0 && k==n-1)
a[i][k] = (a[i+1][k]+a[i][k-1]);
else
a[i][k] = (a[i+1][k]+a[i][k-1])*0.5;
}
}
float sum=0.0;
for(i=0;i<n;i+=2){
if(i != n-1)
sum+=a[0][i]+a[n-1-i][n-1];
else
sum+=a[0][i];
}
printf("%.3f\n",sum);
}
getch();
}
,請您提供一些提示如何優化上面的代碼。
到目前爲止你有什麼?請給我們看一些代碼。 –
@Fabian:添加了代碼。 – jigsawmnc
可以很容易地看到與輸入n對應的情況是對應於輸入n-1的情況的擴展。主要的問題是我不能想出一個利用這種依賴性的解決方案(類似於我們使用先前值的DP)。 – jigsawmnc