| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1084 人关注过本帖
标题:最大K乘积算法的证明 求助
只看楼主 加入收藏
kakaln
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-12-27
收藏
 问题点数:0 回复次数:0 
最大K乘积算法的证明 求助
最大K乘积算法 求助
①问题描述
设I 是一个n 位十进制整数。如果将I 划分为k 段,则可得到k 个整数。这k 个整数的乘积称为I 的一个k 乘积。
对于给定的I 、n和k,试设计一个算法,编程计算I 的最大k 乘积
运用动态规划法实现算法.算法已经差不多了.
要求用反证法证明K乘积具有最优子结构性质,另外还有几个问题要解决,希望好心人帮忙啊.
1)    首先用反证法证明最大k乘积问题具有最优子结构性质。
2)    列出计算最优值的递归式,并以n=4,k=3,I=3456为例,在草稿纸上求出最优值。回答问题:何为最大k乘积问题的最优解,何为最大k乘积问题的最优解?
3)    给出使用动态规划法计算最优值的算法,用C++语言描述
4)    最大k乘积问题是要求出最优值还是最优解?
具体算法如下:#include "iostream.h"
#include "stdio.h"
int putnum;
int f[99][99];
int ka[99][99];
int n,m;
conv(int i,int w)
{
int j=i+w;
int q=10;
int p=10;
for (int m=2;m<=n-j;m++)
{
  q=q*10;
}
if (j==n)
{
  q=1;
}
for (m=2;m<=j-i;m++)
{
  p=p*10;
}
int pass= putnum/q%p;
return pass;
}
void solve(int n,int m)
{
int i,j,k;
int temp,maxt,tk=0;
for(i=1;i<=n;i++)
   f[i][1]=conv(0,i);
for(j=2;j<=m;j++)
   for(i=j;i<=n;i++)
      {
       for(k=1,temp=0;k<i;k++)
         {
          maxt=f[k][j-1]*conv(k,i-k);
          if(temp<maxt)
            {
             temp=maxt;tk=k;
            }
          }
       f[i][j]=temp;ka[i][j]=tk;
      }
}   
void main()
{
cout<<"please put your num mast < 10 bit) \n";
cin>>putnum;
cout<<"please put your num length \n";
cin>>n;
cout<<"how much do your want to carve up? \n";
cin>>m;
solve(n,m);
cout<<(f[n][m])<<"\n";
}
搜索更多相关主题的帖子: 乘积 最大K 算法 整数 子结构 
2007-12-27 15:25
快速回复:最大K乘积算法的证明 求助
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016619 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved