• DP入门 最佳加法表达式


    描述

    给定n个1到9的数字,要求在数字之间摆放m个加号(加号两边必须有数字),使得所得到的加法表达式的值最小,并输出该值。例如,在1234中摆放1个加号,最好的摆法就是12+34,和为36

    输入
    有不超过15组数据
    每组数据两行。第一行是整数m,表示有m个加号要放( 0<=m<=50)
    第二行是若干个数字。数字总数n不超过50,且 m <= n-1
    输出
    对每组数据,输出最小加法表达式的值
    样例输入
    2
    123456
    1
    123456
    4
    12345
    
    样例输出
    102
    579
    15


    推荐博文:1点击打开链接 2点击打开链接


    #include<stdio.h>
    #include<iostream>
    #include<string>
    #include<string.h>
    #include<cmath>
    #include<algorithm>
    #define inf 0x3f3f3f3f
    using namespace std;
    int num[100][100],v[100][100];
    int s1[100];
    int n,m;
    
    int main()
    {
        int i,j,k;
        int tmp;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for(i=1; i<=n; i++)scanf("%d",&s1[i]);
            for(i=1; i<=n; i++)//num[i][j]表示字符串中从i到j组成的数字
            {
                tmp=0;
                for(j=i; j<=n; j++)
                {
                    tmp=tmp*10+s1[j];
                    if(i==j)num[i][j]=s1[i];//如果i==j则是这个这个数本身
                    else num[i][j]=tmp;
                }
            }
    
    
            for(i=1; i<=n; i++)
                for(j=1; j<=n; j++)
                    v[i][j]=inf;//v矩阵初始化
    
            for(i=1; i<=n; i++)
                v[i][0]=num[1][i];//0个加号的情况
    
    
            for(j=1; j<=m; j++)
            {
                for(i=j; i<=n; i++)//i至少比j大因为n>=m+1
                {
                    for(k=j; k<=i; k++)
                        v[i][j]=min(v[i][j],v[k][j-1]+num[k+1][i]);
                }
            }
            /*
            举个例子:v[6][3]=min(v[3][2]+num[4][6],v[4][2]+num[5][6],v[5][2]+num[6][6])
            */
    //        for(i=1; i<=n; i++)
    //        {
    //            for(j=0; j<=m; j++)
    //                printf("%6d ",v[i][j]);
    //            printf("
    ");
    //        }
            printf("%d
    ",v[n][m]);
    
        }
        return 0;
    }
    /*
    5 3
    1 2 3 4 5
    6 2
    1 2 3 4 5 6
    6 1
    1 2 3 4 5 6
    5 4
    1 2 3 4 5
    */
    
    
    



  • 相关阅读:
    C语言中scanf函数的实现
    Express中设置cookie,session,token
    ajax2.0提供的FormData
    将json字符串解析为对象的三种方式
    ajax中的跨域问题
    html5中的图片预览
    jQuery中的ajax
    jQuery中的表单序列化
    实现一个瀑布流
    ajax
  • 原文地址:https://www.cnblogs.com/hjch0708/p/7554819.html
Copyright © 2020-2023  润新知