今年是國際數學聯盟確定的「2000——世界數學年」,又恰逢我國著名數學家華羅庚先生誕辰90周年。
在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友 xz 也有幸得以參加。
活動中,主持人給所有參加活動的選手出了這樣一道題目:
設有乙個長度為 n 的數字串,要求選手使用 k 個乘號將它分成 k+1 個部分,找出一種分法,使得這 k+1 個部分的乘積最大。
同時,為了幫助選手能夠正確理解題意,主持人還舉了如下的乙個例子:
有乙個數字串:312, 當 n=
3,k=
1n=3,k=
1 時會有以下兩種分法:
1)3*12=
362)31*2
=62這時,符合題目要求的結果是:31*2
=62。
現在,請你幫助你的好朋友 xz 設計乙個程式,求得正確的答案。
輸入格式
第一行共有2個自然數 n,k。
第二行是乙個長度為 n 的數字串。
輸出格式
輸出所求得的最大乘積(乙個自然數)。
資料範圍
2≤n≤10
,1≤k≤6
,資料保證 k輸入樣例:42
1231
輸出樣例:
62
#include
using
namespace std;
int n,k;
string a;
int ans=0;
//記錄最大值
int cnt=0;
int path[
100]
;int
check()
int sum=1;
for(
int i=
0;isize()
;i++
)return sum;
}void
dfs(
)for
(int i=
1;i}int
main()
#include
using
namespace std;
int n,k;
string a;
int ans=0;
//記錄最大值
int path[
100]
;vector<
int>v;
intnum
(int l,
int r)
return s;
}void
dfs(
int p,
int cnt)
for(
int i=
0;i1;i++)}
}int
main()
#include
#include
#include
using
namespace std;
const
int n =
45, m =10;
int n , k;
int w[n]
;int num[n]
[n];
int f[n]
[m];
//f[i][j]表示1到i中有j個乘號的最大乘積是多少
intmain()
for(
int i =
1; i <= n ; i++
)for
(int j = i ; j <= n ;j++
)for
(int i =
1; i <= n ;i++
)f[i][0
]= num[1]
[i];
for(
int i =
1; i <= n ;i++
)for
(int j =
1; j <= k ;j++
)for
(int h =
1; h < i ; h++
) f[i]
[j]=
max(f[i]
[j], f[i-h]
[j -1]
* num[i - h +1]
[i])
;//也可以這麼列舉f[i][j] = max(f[i][j] ,
//f[h][j - 1] * num[h + 1][i]);
cout << f[n]
[k]<< endl;
return0;
}
動態規劃 乘積最大
古人云 不謀萬世者,不足謀一時 不謀全域性者,不足謀一域。張琪曼通過研究驚奇地發現,每個人一生的幸福指數可以用乙個長度為n的十進位制數字字串來表示,並且可以通過全域性統籌安排,將幸福指數分成k 1個部分應用在她感興趣的不同領域,從而使得總體幸福值最強,所謂幸福值最強,是指使得k個部分的乘積為最大。例...
《動態規劃》 乘積最大
今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度為n的數字串,要求選手使用k個乘號將它分成...
乘積最大 動態規劃
今年是國際數學聯盟確定的 2000 世界數學年 又恰逢我國著名數學家華羅庚先生誕辰90周年。在華羅庚先生的家鄉江蘇金壇,組織了一場別開生面的數學智力競賽的活動,你的乙個好朋友xz也有幸得以參加。活動中,主持人給所有參加活動的選手出了這樣一道題目 設有乙個長度為n的數字串,要求選手使用k個乘號將它分成...