算法训练 最大的算式
生活随笔
收集整理的這篇文章主要介紹了
算法训练 最大的算式
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
算法訓練 最大的算式 ? 時間限制:1.0s ? 內存限制:256.0MB 問題描述 題目很簡單,給出N個數字,不改變它們的相對位置,在中間加入K個乘號和N-K-1個加號,(括號隨便加)使最終結果盡量大。因為乘號和加號一共就是N-1個了,所以恰好每兩個相鄰數字之間都有一個符號。例如:
N=5,K=2,5個數字分別為1、2、3、4、5,可以加成:
1*2*(3+4+5)=24
1*(2+3)*(4+5)=45
(1*2+3)*(4+5)=45
…… 輸入格式 輸入文件共有二行,第一行為兩個有空格隔開的整數,表示N和K,其中(2<=N<=15, 0<=K<=N-1)。第二行為 N個用空格隔開的數字(每個數字在0到9之間)。 輸出格式 輸出文件僅一行包含一個整數,表示要求的最大的結果 樣例輸入 5 2
1 2 3 4 5 樣例輸出 120 樣例說明 (1+2+3)*4*5=120 好像正解使用動態規劃,我用遞歸做的,但有一組測試數據沒通過。。。 #include <iostream> #include <cstdio> #include <vector> #include <queue> #include <cstring> #include <algorithm> #include <cstdlib> #include <map> #define for(i,x,n) for(int i=x;i<n;i++) #define ll long long int #define INF 0x3f3f3f3f #define MOD 1000000007using namespace std;int a[15];//0為*,1為+ int num[15]; int m[15];//待乘 int n,k; int maxx=0;int sum(){int i=0;if(a[1]==0){m[i++]=num[0];m[i]=num[1];for(j,2,n){if(a[j]==1){m[i]+=num[j];}if(a[j]==0){m[++i]=num[j];}}int ans=1;for(j,0,i+1){ans*=m[j];}return ans;}if(a[1]==1){m[i]=num[0];m[i]+=num[1];for(j,2,n){if(a[j]==1){m[i]+=num[j];}if(a[j]==0){m[++i]=num[j];}}int ans=1;for(j,0,i+1){ans*=m[j];}return ans;}}void dfs(int pos,int mul,int add){if(pos==n&&mul==0&&add==0){maxx=max(maxx,sum());}else if(pos!=n){if(mul>0&&add==0){a[pos]=0;dfs(pos+1,mul-1,add);}if(mul==0&&add>0){a[pos]=1;dfs(pos+1,mul,add-1);}if(mul>0&&add>0){a[pos]=0;dfs(pos+1,mul-1,add);a[pos]=1;dfs(pos+1,mul,add-1);}} }int main() {scanf("%d %d",&n,&k);for(i,0,n){scanf("%d",&num[i]);}dfs(1,k,n-k-1);//放的位置,乘號剩余,加號剩余printf("%d",maxx);return 0; }
N=5,K=2,5個數字分別為1、2、3、4、5,可以加成:
1*2*(3+4+5)=24
1*(2+3)*(4+5)=45
(1*2+3)*(4+5)=45
…… 輸入格式 輸入文件共有二行,第一行為兩個有空格隔開的整數,表示N和K,其中(2<=N<=15, 0<=K<=N-1)。第二行為 N個用空格隔開的數字(每個數字在0到9之間)。 輸出格式 輸出文件僅一行包含一個整數,表示要求的最大的結果 樣例輸入 5 2
1 2 3 4 5 樣例輸出 120 樣例說明 (1+2+3)*4*5=120 好像正解使用動態規劃,我用遞歸做的,但有一組測試數據沒通過。。。 #include <iostream> #include <cstdio> #include <vector> #include <queue> #include <cstring> #include <algorithm> #include <cstdlib> #include <map> #define for(i,x,n) for(int i=x;i<n;i++) #define ll long long int #define INF 0x3f3f3f3f #define MOD 1000000007using namespace std;int a[15];//0為*,1為+ int num[15]; int m[15];//待乘 int n,k; int maxx=0;int sum(){int i=0;if(a[1]==0){m[i++]=num[0];m[i]=num[1];for(j,2,n){if(a[j]==1){m[i]+=num[j];}if(a[j]==0){m[++i]=num[j];}}int ans=1;for(j,0,i+1){ans*=m[j];}return ans;}if(a[1]==1){m[i]=num[0];m[i]+=num[1];for(j,2,n){if(a[j]==1){m[i]+=num[j];}if(a[j]==0){m[++i]=num[j];}}int ans=1;for(j,0,i+1){ans*=m[j];}return ans;}}void dfs(int pos,int mul,int add){if(pos==n&&mul==0&&add==0){maxx=max(maxx,sum());}else if(pos!=n){if(mul>0&&add==0){a[pos]=0;dfs(pos+1,mul-1,add);}if(mul==0&&add>0){a[pos]=1;dfs(pos+1,mul,add-1);}if(mul>0&&add>0){a[pos]=0;dfs(pos+1,mul-1,add);a[pos]=1;dfs(pos+1,mul,add-1);}} }int main() {scanf("%d %d",&n,&k);for(i,0,n){scanf("%d",&num[i]);}dfs(1,k,n-k-1);//放的位置,乘號剩余,加號剩余printf("%d",maxx);return 0; }
?更新:
#include <iostream> #include <cstdio> #include <vector> #include <queue> #include <cstring> #include <algorithm> #include <cstdlib> #include <map> #define for(i,x,n) for(int i=x;i<n;i++) #define ll long long int #define INF 0x3f3f3f3f #define MOD 1000000007using namespace std;int a[15];//0為*,1為+ ll num[15]; ll m[15];//待乘 ll n,k; ll maxx=0;ll sum(){int i=0;if(a[1]==0){m[i++]=num[0];m[i]=num[1];for(j,2,n){if(a[j]==1){m[i]+=num[j];}if(a[j]==0){m[++i]=num[j];}}ll ans=1;for(j,0,i+1){ans*=m[j];}return ans;}if(a[1]==1){m[i]=num[0];m[i]+=num[1];for(j,2,n){if(a[j]==1){m[i]+=num[j];}if(a[j]==0){m[++i]=num[j];}}ll ans=1;for(j,0,i+1){ans*=m[j];}return ans;}}void dfs(int pos,int mul,int add){if(pos==n&&mul==0&&add==0){if(maxx<sum()){maxx=sum();}//maxx=max(maxx,sum());}else if(pos!=n){if(mul>0&&add==0){a[pos]=0;dfs(pos+1,mul-1,add);}if(mul==0&&add>0){a[pos]=1;dfs(pos+1,mul,add-1);}if(mul>0&&add>0){a[pos]=0;dfs(pos+1,mul-1,add);a[pos]=1;dfs(pos+1,mul,add-1);}} }int main() {scanf("%d %d",&n,&k);for(i,0,n){scanf("%d",&num[i]);}dfs(1,k,n-k-1);//放的位置,乘號剩余,加號剩余printf("%lld",maxx);return 0; }?
轉載于:https://www.cnblogs.com/TWS-YIFEI/p/6351623.html
總結
以上是生活随笔為你收集整理的算法训练 最大的算式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习19--生成器
- 下一篇: Python 【第十三章】 Django