zoukankan      html  css  js  c++  java
  • 洛谷 P1018 [NOIP2000 提高组] 乘积最大(dp,高精度)

    传送门


    解题思路

    不得不说,这题恶心到我了,调了一个多小时。

    第一次高精度把运算等写在struct里面,感觉良好。但是一定要注意初始化。

    再就是高精乘高精最后的位数是两个位数相加,而不是相乘。

    AC代码

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    int n,k;
    char s[55];
    struct node{
    	int a[50],num;
    	node operator *(const node b)const{
    		node res;
    		res.num=num+b.num;
    		for(int i=1;i<=45;i++) res.a[i]=0;
    		for(int i=1;i<=num;i++){
    			for(int j=1;j<=b.num;j++){
    				res.a[i+j-1]+=a[i]*b.a[j];
    			}
    		}
    		for(int i=1;i<=res.num;i++){
    			res.a[i+1]+=res.a[i]/10;
    			res.a[i]%=10;
    		}
    		while(res.num>1&&res.a[res.num]==0) res.num--;
    		return res;
    	}
    	bool operator <(const node b)const{
    		if(num!=b.num) return num<b.num;
    		for(int i=num;i>=1;i--){
    			if(a[i]!=b.a[i]) return a[i]<b.a[i];
    		}
    		return 1;
    	}
    }dp[50][10];
    void print(node x){
    	for(int i=x.num;i>=1;i--) cout<<x.a[i];
    	cout<<endl;
    }
    node getnum(int l,int r){
    	node res;
    	res.num=r-l+1;
    	for(int i=l;i<=r;i++){
    		res.a[r-i+1]=s[i]-'0';
    	}
    	while(res.num>1&&res.a[res.num]==0) res.num--;
    	return res;
    }
    int main(){
    	ios::sync_with_stdio(false);
    	cin>>n>>k;
    	for(int i=1;i<=n;i++) cin>>s[i];
    	for(int i=1;i<=n;i++){
    		dp[i][0]=getnum(1,i);
    	}
    	for(int j=1;j<=k;j++){
    		for(int i=1;i<=n;i++){
    			if(j>=i) continue;
    			for(int kkk=1;kkk<i;kkk++){
    				if(j>kkk) continue;
    				dp[i][j]=max(dp[i][j],dp[kkk][j-1]*getnum(kkk+1,i));
    			}
    		}
    	}
    	print(dp[n][k]);
    	return 0;
    }
    

    //NOIP2000提高组 t2

  • 相关阅读:
    JavaBasics-15-多线程
    4.10 SpringCloud微服务技术栈
    4.3 Linux操作系统_Unix操作系统
    4.2 互联网项目架构演进
    4.1 微服务框架_引言
    4.6 Redis
    SpringBoot
    docker-dockerfile实战构建文件
    docker 安装私有仓库 registry(离线)
    基础K8S搭建(20209.08亲测成功)
  • 原文地址:https://www.cnblogs.com/yinyuqin/p/15331742.html
Copyright © 2011-2022 走看看