除法(Division,uva725)

输入整数n,按从小到大的顺序输出所有形如abcde/fghij=n的表达式,其中a~j恰好为数字0~9的一个排列(可以有前导0),2<=n<=79。

输入:输入若干组数据,以文件结束符结束。

输出:For each test case you must print the message: Case #M: The maximum product is P., where M is the number of the test case, starting from 1, and P is the value of the maximum product. After each test case you must print a blank line.

样例输入:

62

样例输出:

79546/01283=62

94736/01528=62

方法1:利用3重循环枚举起点和终点。

错误程序:

#include<iostream>
#include<cstdio>
using namespace std;
int a[30];
int main(){
 int n,m=0;
 while (cin>>n){
  m++;
 long long maxc=0,s; 
 for(int i=1;i<=n;i++) cin>>a[i];
 for (int i=1;i<=n;i++){
  for (int j=i+1;j<=n;j++){//程序错误:考虑不全,当单个数为最大值时,(更没有考虑到,当第n个数为最大值的情况),不能出正确结果
   s=a[i];
   for (int k=i+1;k<=j;k++)s=s*a[k];
   if (s>maxc) maxc=s;
  }
  
 }
  cout<<"Case #"<<m<<": The maximum product is "<<maxc<<"."<<endl<<endl;
 }
 return 0;
 
}

修改1:

for (int i=1;i<=n;i++){
for (int j=i;j<=n;j++){
s=a[i];
if (s>maxc) maxc=s;
for (int k=i+1;k<=j;k++)s=s*a[k];
if (s>maxc) maxc=s;
}
}

继续修改:

for (int i=1;i<=n;i++){
for (int j=i;j<=n;j++){
s=1;
for (int k=i;k<=j;k++)s=s*a[k];
if (s>maxc) maxc=s;
}
}

简化:由三重循环修改为二重

for (int i=1;i<=n;i++){
  s=1;
  for (int j=i;j<=n;j++){
    s=s*a[j];//累乘即可
  if (s>maxc) maxc=s;
  }
}

继续简化:能不能用一维实现

思路,动态规划,模拟加法的最长连续子序列 f[i]=max(f[i-1],a[i]),则有:

因为本题是乘法,需要如果只单纯记录最大值是不妥当的,因为负数的最小值*负数结果也可能最大。所以有:

f[i]=max(max(f[i-1]*a[i],g[i-1]*a[i]),a[i]);
g[i]=min(min(f[i-1]*a[i],g[i-1]*a[i]),a[i]);

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long f[30],g[30],a[30];
int main(){
int n,m=0;
while (cin>>n){
m++;
long long maxc=0,s;
for(int i=1;i<=n;i++) cin>>a[i];
memset(f,0,sizeof(f));
memset(g,0,sizeof(g));
for (int i=1;i<=n;i++){
f[i]=max(max(f[i-1]*a[i],g[i-1]*a[i]),a[i]);
g[i]=min(min(f[i-1]*a[i],g[i-1]*a[i]),a[i]);
}
for(int i=1;i<=n;i++)if (maxc<f[i]) maxc=f[i];
cout<<"Case #"<<m<<": The maximum product is "<<maxc<<"."<<endl<<endl;
}
return 0;
}

符:算法竞赛入门经典例题7—2

uva11059的更多相关文章

  1. uva11059(最大乘积)

    Problem D - Maximum Product Time Limit: 1 second Given a sequence of integers S = {S1, S2, ..., Sn}, ...

  2. UVA11059 - Maximum Product

    1.题目名称 Maximum Product 2.题目地址 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemi ...

  3. 7_2 最大乘积(UVa11059)<枚举连续子序列>

    给一个数字集合{ S1,S2,…,Sn },请从这个数字集合里找出一段连续数字,使他们的乘积是最大的.以Case 1为例子,2 x 4 = 8为这个集合的最大乘积:而Case 2则为2 x 5 x(– ...

  4. 枚举专项练习_Uva725(Division)_Uva11059(Maximun Product)

    //Uva725 #include <iostream> #include <cstring> #include <cstdlib> #include <cs ...

随机推荐

  1. vitamio 缓冲一部分时,loading还没消失,直接点击播放,loading未能消失

    在videoView的start()中 添加loading消失语句,效果很好 ,也没有出现任何问题

  2. 抛弃vboot不格盘用grub4dos+firadisk安装Ghost版XP到VHD,轻松RAMOS!

    http://bbs.wuyou.net/forum.php?mod=viewthread&tid=363198&extra=抛弃vboot不格盘用grub4dos+firadisk安 ...

  3. C++语言中cin cin.getline cin.get getline gets getchar 的用法实例

    #include <iostream> #include <string> using namespace std; //关于cin cin.getline cin.get g ...

  4. 日期操作类--Date类

    Date-API ava.util包提供了Date类来封装当前的日期和时间.Date类提供两个构造函数来实例化Date对象.第一个构造函数使用当前日期和时间来初始化对象. Date( ) 第二个构造函 ...

  5. js 继承inheritance/extends

    主要就是<javascript语言精粹>语言精粹中的内容 5.1伪类 Function.prototype.method = function(name,func){ this.proto ...

  6. Spring 框架整理

    在web.xml中配置以下内容 <!-- 配置Spring MVC DispatcherServlet --> <servlet> <servlet-name>MV ...

  7. iOS开发UIScrollView的底层实现

    起始 做开发也有一段时间了,经历了第一次完成项目的激动,也经历了天天调用系统的API的枯燥,于是就有了探索底层实现的想法. 关于scrollView的思考 在iOS开发中我们会大量用到scrollVi ...

  8. SAP销售订单状态修改(审核) 计划行自动产生需求,产生MD04需求

    不知道业务怎么配置的,创建销售单时,一堆计划行类别,什么CN,DN...都有,但是审核后需要计划行变更为CP,这样在MD04才能看到需求. 原有逻辑是弄个后台程序,审核后调一下,更新一下计划行,这样是 ...

  9. Objective-C:Foundation框架-常用类-NSMutableString

    NSString是不可变的,不能删除字符或修改字符,它有一个子类NSMutableString,为可变字符串. NSMutableString的两种创建方法: - (id) initWithCapac ...

  10. splunk 索引过程

    术语: Event :Events are records of activity in log files, stored in Splunk indexes. 简单说,处理的日志或话单中中一行记录 ...