关于动态规划的poj的一些解题报告和代码

源代码在线查看: 最大乘积 动态规划.txt

软件大小: 8 K
上传用户: granite518
关键词: poj 动态规划 代码 报告
下载地址: 免注册下载 普通下载 VIP

相关代码

				#include 
				#include 
				#include 
				#include 
				#include 
				using namespace std;
				
				//最大乘积 动态规划
				#define NMAX 12
				#define CMAX 7
				__int64 f[NMAX][CMAX];//f[i][j],长度为i,用了j个乘号后的最大值
				char str[22];
				
				void print(int num,int k)
				{	//用于调试时打印f[][]
				    int i,j;
				    for(i=0;i				    {
				        for(j=1;j				            printf("%6d",f[i][j]);
				        cout				    }
				    cout				//  system("pause");    
				}
				
				int conv(int start,int num)
				{	//在str[i]中,以start为起点,num为长度所表示的数字
					int sum,i;
					sum=0;
					for(i=1;i					{
						sum*=10;
						sum+=str[start+i-1]-'0';
					}
					return sum;
				}
				
				void cal(int num,int chen)
				{
					int i,j,temp,k;
					for(i=0;i					{	//初始化,不用乘号时的情况
						f[i][0]=conv(0,i+1);
					}
					for(j=1;j					{
						for(i=j;i						{
							temp=0;
							for(k=0;k							{
								//a1,a2,a3..an用j个乘号连接
								//看成是a1,a2...ak已经用j-1个乘号连接,
								//然后再与后面的ak+1,ak+2..an组成的数用1个乘号连接
								if(temp									temp=f[k][j-1]*conv(k+1,i-k);
							}
							f[i][j]=temp;//找到局部的最大乘积
						}
				//		print(num,chen);
					}
				}
				
				int main()
				{
					int num,chen;
					while(scanf("%d%d",&num,&chen)!=EOF)
				    {
				        scanf("%s",&str);
				        cal(num,chen);
				        printf("%I64d\n",f[num-1][chen]);
				    }
					return 0;
				}			

相关资源