1 条题解

  • 0
    @ 2024-12-24 10:06:07

    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
    上传者