CSDN编程竞赛-第四期(三四题)

想写点感慨,想了好多,我太菜了,就这样吧。

3、小Q整数分割

小Q决定把一个整数n,分割为k个整数。
每个整数必须大于等于1。
小Q有多少方案。

输入描述:

输入整数n,k.(1<=n,k<=100)

输出描述:

输出方案数。答案对1e9+7取模。

输入样例:

3 3

输出样例:

1

dfs爆搜(80%,缺少去重)

#include 
#include 

int num = 0;
int dfs(int n, int k){
    if(k < 0){
        return ;
    }
    if(k == 0 && n == 0){
        num = (num + 1) % (int)(1e9+7);
        return ;
    }
    int i;
    for(i=1; i<=n; i++){
        dfs(n-i,k-1);
    }
    return ;
}
int main()
{
    int n, k;
    scanf("%d %d", &n, &k);

    dfs(n, k);

    printf("%d\n", num);
    return 0;
}

dp做法(100%)

#include 
#include 


int main()
{
    int n, k;
    scanf("%d %d", &n, &k);

    int num[105][105];
    memset(num, 0, sizeof(int) * 1024);
    int i, j, kk;
    for(i=1; i<=n; i++){
        num[i][1] = 1;
    }
    for(i=1; i<=n; i++){
        for(j=1;j<=k;j++){
                if(i > j){
                    num[i][j] = num[i-1][j-1] + num[i-j][j];
                }else{
                    num[i][j] = 1;
                }
        }
    }

    printf("%d\n", num[n][k]);
    return 0;
}

4、新型美丽数列

定义美丽数列A: 1. 数列中相邻的数越是靠内相对大小加一,a[2]=a[1]+1,a[n-2]=a[n-1]+1… 2. 距离边缘距离相等的 数的大小相等:a[0] = a[n-1],a[1] = a[n-2]… 通过修改最小的数字使得给定数列变成美丽数列。 修改后的值必须仍是正整数

#include 
#include 

int main()
{
    int n, a[105], b[105];
    scanf("%d", &n);
    int i;
    for(i=0; i num){
            min = num;
        }
    }
    printf("%d\n", min);
    return 0;
}

参考:CSDN竞赛第四期季军 解题思路及参赛经历分享_阿杆.的博客-CSDN博客

你可能感兴趣的:(ACM算法模板,蓝桥杯)