星河酷跑 2022-03-09 10:37 采纳率: 50%
浏览 115
已结题

请问这个怎么改能够让他不Time limit exceeded

请问这个怎么改能够让他不Time limit exceeded

img

#include<stdio.h>
int answer(char a[], char b[], int m, int n) {
    int i, j, k, number = 0;
    if (n == 1) {
        for (i = 0; i < m; i++) {
            if (b[0] == a[i]) {
                number++;
            }
        }
        return number;
    }
    else if (n == 2) {
        i = 0;
        for (; i < m;i++)
        {
            if (b[0] == a[i]) {
                j = i + 1;
                for (; j < m; j++) {
                    if (b[1] == a[j]) {
                        number++;
                    }
                }
            }
        }return number;
    }
    else {
        i = 0;
        for (; i < m; i++)
        {
            if (b[0] == a[i]) {
                j = i + 1;
                for (; j < m; j++) {
                    if (b[1] == a[j]) {
                        k = j + 1;
                        for (; k < m; k++) {
                            if (b[2] == a[k]) {
                                number++; 
                            }
                        }
                    }
                }
            }
        }return number;
    }
}
int main() {
    int m, n, sum = 0; char ch;
    char a[100000], b[5];
    scanf("%d %d", &m, &n);
    scanf("%s",a);
    ch=getchar();
    scanf("%s", b);
    sum=answer(a,b,m,n);
    printf("%d\n", sum);
    return 0;
}

  • 写回答

5条回答 默认 最新

  • hfhua 2022-03-09 11:38
    关注
    获得2.00元问题酬金
    
    #include<stdio.h>
        int answer(char s[], char t[], int m, int n) {
            if(n > m)
                return 0;
        
            int dp[n + 1][m + 1];
            int len0 = m + 1;
            for (int i = 0; i < len0; i++) {
                dp[0][i] = 1;
            }
            int len = n + 1;
            for (int i = 1; i < len; i++) {
                dp[i][0] = 0;
            }
    
            for (int i = 1; i < len; i++) {
                for (int j = 1; j < len0; j++) {
                    if(s[j - 1] == t[i - 1])
                        dp[i][j] = dp[i - 1][j - 1] + dp[i][j - 1];
                    else
                        dp[i][j] = dp[i][j - 1];
                }
            }
            return dp[n][m];
        }
    int main() {
        int m, n, sum = 0; char ch;
        char a[100000], b[5];
        scanf("%d %d", &m, &n);
        scanf("%s",a);
        ch=getchar();
        scanf("%s", b);
        sum=answer(a,b,m,n);
        printf("%d\n", sum);
        return 0;
    }
    
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 3月17日
  • 赞助了问题酬金10元 3月9日
  • 创建了问题 3月9日