BNU4072:最大和
来源:互联网 发布:cst软件下载 编辑:程序博客网 时间:2024/06/07 16:12
给你一串数,再给你几个加号插入这串数中,求使和最大的方案。 如给你594,再给你一个加号,易得最优方案为5+94=99。
Input
第一行为这一串长数,长度l<=400。 第二行为一个整数k,代表加号的个数,k<=400。
Output
一个数,为最优解。
Sample Input
5941
Sample Output
99
唉,寒假荒废了一个多月,实在惭愧啊,虽说家里没有电脑,但是这些都只是借口,话不多说,赶快老老实实A题吧
这道题看上去似乎有点复杂,其实相同了很简单
无论多长的数,多少个加号,那么我们只需要找到加号用完的前提下,能得到的最长的数即可,因为每增加一位,其数量级也是几何增长的
例如594,在添加一个加号的情况下,能得到的一个最长的数是2位
那么在594中找到最大的2位数,其他全部按个位数即可
又比如653421,在添加3个加号的情况下能得到的最长位数是3位
而里面最大的三位数是653,然后653+4+2+1=660
也就是说,在长len,添加k个加号的情况下,我们只需要找到长度为len-k的最大数,再加上其他每位数就是答案了
#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;int main(){ char num[500],maxn[500],tem[500]; int len,k,i,j,pos,ans[500],l,t; while(~scanf("%s%d",num,&k)) { memset(maxn,0,sizeof(maxn)); memset(tem,0,sizeof(tem)); memset(ans,0,sizeof(ans)); len = strlen(num); for(i = 0; i<=k; i++)//找len-k长度下的最大数 { for(j = 0; j<len-k; j++) tem[j] = num[j+i]; if(strcmp(tem,maxn)>0) { memset(maxn,0,sizeof(maxn)); strcpy(maxn,tem); pos=i; } } l = 0; t = 0; for(i = 0; i<pos; i++) t+=num[i]-'0'; for(i = pos+len-k; i<len; i++) t+=num[i]-'0'; for(i = pos+len-k-1; i>=pos; i--)//由于是大数,要存入数组,通过取模实现 { ans[l++]=(t+num[i]-'0')%10; t = (t+num[i]-'0')/10; } while(t) { ans[l++] = t%10; t/=10; } l--; while(!ans[l] && l) l--; for(i = l; i>=0; i--) printf("%d",ans[i]); printf("\n"); } return 0;}
0 0
- BNU4072:最大和
- 最大和
- 最大和
- 最大和
- 最大和
- 最大和
- 最大和
- 最大和
- 最大和
- 最大和
- 最大和
- 最大和
- 最大和
- 最大和
- 最大子矩阵的和 最大和
- 最大连续和
- 递归求最大和
- 最大子段和
- 黑苹果安装难点与指导
- 关于学习c++
- storm集群的配置与启动
- /bin/bash^M: 坏的解释器: 没有那个文件或目录
- CVE-2013-0961
- BNU4072:最大和
- NSString和NSAttributedString的Attribute参数
- TC-SRM-609-DIV2-950- VocaloidsAndSongs
- poj 2892 Tunnel Warfare(线段树 单点更新 区间合并)
- Java 中的 TreeMap 与 HashMap
- java网络编程
- andriod驱动之旅-了解:移植内核+Android系统到S3C2440(9)
- XML fragments parsed from previous mappers does not
- 如何封装结构体