SPOJ 364 - Pocket Money(DP)

很简单的递归结构的DP,状态转移方程:dmax(i,j)=max(dmax(i,j),dmax(i,k)<cal>dmax(k+1,j));dmin(i,j)=max(dmin(i,j),dmin(i,k)<cal>dmin(k+1,j))

#include <stdio.h>
#include <string.h>
#define LL unsigned long long
LL ma[110][110];
LL mi[110][110];
LL a[110];
char s[110];
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n=1;
        while(scanf("%llu%c",&a[n],&s[n])==2)
        {
            n++;
            if(s[n-1]=='\n')break;
        }
        n--;
//        printf("%d\n",n);

        memset(mi,0,sizeof(mi));
        memset(ma,0,sizeof(ma));
        for(int i=1;i<=n;i++)
        {
            mi[i][i]=a[i];
            ma[i][i]=a[i];
        }
        for(int l=1;l<n;l++)
        {
            for(int i=1;i+l<=n;i++)
            {
                mi[i][i+l]=1LL<<62;
                ma[i][i+l]=0;
                for(int j=i;j<i+l;j++)
                {
                    if(s[j]=='+')
                    {
                        if(mi[i][j]+mi[j+1][i+l]<mi[i][i+l])
                        mi[i][i+l]=mi[i][j]+mi[j+1][i+l];
                        if(mi[i][j]+mi[j+1][i+l]>ma[i][i+l])
                        ma[i][i+l]=mi[i][j]+mi[j+1][i+l];
                        if(ma[i][j]+ma[j+1][i+l]<mi[i][i+l])
                        mi[i][i+l]=ma[i][j]+ma[j+1][i+l];
                        if(ma[i][j]+ma[j+1][i+l]>ma[i][i+l])
                        ma[i][i+l]=ma[i][j]+ma[j+1][i+l];
                    }
                    if(s[j]=='*')
                    {
                        if(ma[i][j]*ma[j+1][i+l]<mi[i][i+l])
                        mi[i][i+l]=ma[i][j]*ma[j+1][i+l];
                        if(ma[i][j]*ma[j+1][i+l]>ma[i][i+l])
                        ma[i][i+l]=ma[i][j]*ma[j+1][i+l];
                        if(mi[i][j]*mi[j+1][i+l]<mi[i][i+l])
                        mi[i][i+l]=mi[i][j]*mi[j+1][i+l];
                        if(mi[i][j]*mi[j+1][i+l]>ma[i][i+l])
                        ma[i][i+l]=mi[i][j]*mi[j+1][i+l];
                    }
                }
            }
        }
//        for(int i=1;i<=n;i++)
//        {
//            for(int j=1;j<=n;j++)
//                printf("(%I64d,%I64d) ",ma[i][j],mi[i][j]);
//            printf("\n");
//        }
        printf("%llu %llu\n",ma[1][n],mi[1][n]);
    }

    return 0;
}


1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值