1 条题解
-
0
C :
#include<stdio.h> #include<string.h> double dp[57][57]; int main() { int t; while(scanf("%d",&t),t) { int i,j; double a,b,c,d,e; scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e); memset(dp,0,sizeof(dp)); dp[t][1]=0; for(i=1;i<=t-1;i++) { dp[t][i+1]+=(dp[t][i]+1); } for(i=t-1;i>=1;i--) { dp[i][1]+=a*(dp[i+1][1]+1)+b*(dp[i+1][2]+1); for(j=2;j<=i;j++) dp[i][j]+=c*(dp[i+1][j]+1)+d*(dp[i+1][j+1]+1)+e*(dp[i][j-1]+1); } printf("%.2lf\n",dp[1][1]); } return 0; }
C++ :
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <string> #include <iostream> #include <map> #include <vector> #include <algorithm> using namespace std; #define MAXN 1000 #define eps 1e-8 double Atex[MAXN][MAXN]; double a[2], b[3]; int all; inline int dcmp(double d) { return d < -eps ? -1 : d > eps; } void gauss(int n, int m) { int r,c,i,j; for(r=c=0; r<n&&c<m; r++,c++) { for(i=r;i<n;i++) if(dcmp(Atex[i][c])) break; if(i==n)//{r--;continue;} return; if(i!=r) for(j=c;j<=m;j++) swap(Atex[i][j],Atex[r][j]); for(i=r+1;i<n;i++) if(Atex[i][c]!=0) { double temp=Atex[i][c]/Atex[r][c]; for(j=c;j<=m;j++) Atex[i][j]-=Atex[r][j]*temp; } } for(i=n-1;i>=0;i--) { Atex[i][m]/=Atex[i][i]; Atex[i][i]=1; for(j=i-1;j>=0;j--) Atex[j][m]-=Atex[i][m]*Atex[j][i]; } return; } void makemap(int n) { memset(Atex, 0, sizeof(Atex)); all = (1+n)*n/2; for (int i = 0; i < all; i ++) { Atex[i][i] = 1; Atex[i][all] = 1; } int t = 0, tt; for (int i = 0; i < n-1; i ++) { tt = t + i+1; Atex[t][tt] = -1*a[0]; Atex[t][tt+1] = -1*a[1]; for (int j = t+1; j < tt; j ++) { Atex[j][j+i+1] = -1*b[0]; Atex[j][j+i+2] = -1*b[1]; Atex[j][j-1] = -1*b[2]; } t = tt; } Atex[t][all] = 0; for (int i = t+1; i < all; i ++) { Atex[i][i-1] = -1; } } int main() { int n; while(scanf("%d", &n) != EOF) { if(n == 0) break; for (int i = 0; i < 2; i ++) { scanf("%lf", &a[i]); } for (int i = 0; i < 3; i ++) { scanf("%lf", &b[i]); } makemap(n); gauss(all, all); printf("%.2f\n", Atex[0][all]); } return 0; }
- 1
信息
- ID
- 1989
- 时间
- 1000ms
- 内存
- 32MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者