不知道为什么官方给的是动态规划 看N<=15最多就2^14种情况吗 直接搜索就OK了 选择哪些位置是乘法
有一点就是要先相加再乘 这样利益再最大化
#include<bits/stdc++.h>using namespace std;int aa[20],k,n;int kk[10];__int64 ss[20];__int64 maxx,d;__int64 xf(int ks,int js){ __int64 ans=0; for(int i=ks+1; i<=js; i++) ans+=aa[i]; return ans;}void dfs(int h,int s){ int i; if(k+1==s) { __int64 ans=0; for(i=0; i<s; i++) { if(i<s-1) ss[i]=xf(kk[i],kk[i+1]); else ss[i]=xf(kk[i],n); } //sort(ss,ss+s); //if(d>ss[s-1]-ss[0]) { for(i=0; i<s; i++) if(i==0) ans=ss[i]; else ans*=ss[i]; if(ans>maxx) maxx=ans; } return ; } if(n-h<k-s+1) return ; for(i=h; i<n; i++) { kk[s]=i; dfs(i+1,s+1); kk[s]=0; dfs(i+1,s); }}int main(){ int i; while(scanf("%d %d",&n,&k)!=EOF) { memset(aa,0,sizeof(aa)); for(i=1; i<=n; i++) scanf("%d",&aa[i]); maxx=0; d=10; for(i=1; i<=n; i++) { memset(kk,0,sizeof(kk)); dfs(i,1); } printf("%I64d/n",maxx); } return 0;}
新闻热点
疑难解答