// 在一个圆形操场的四周摆放 N 堆石子,现要将石子有次序地合并成一堆,规定每次只能选相邻的 2 堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分。
#include<iostream>
#include<cstring>
using namespace std;
const int N=500+5;
int s[N];
int Max[N][N];
int Min[N][N];
int MAX=-1;
int MIN=1e9;
int main(){
int n;
cin>>n;
memset(Max,-0x3f,sizeof(Max));
memset(Min,0x3f,sizeof(Min));
for(int i=1;i<=n;i++){
cin>>s[i];
s[i+n]=s[i];
Max[i][i]=0;
Max[i+n][i+n]=0;
Min[i][i]=0;
Min[i+n][i+n]=0;
}
for(int i=1;i<=2*n;i++)s[i]+=s[i-1];
for(int i=1;i<=n;i++){
for(int len=2;len<=n;len++){
for(int l=i;l+len-1<=n+i-1;l++){
int r=l+len-1;
for(int k=l;k<r;k++){
Max[l][r]=max(Max[l][r],Max[l][k]+Max[k+1][r]+s[r]-s[l-1]);
Min[l][r]=min(Min[l][r],Min[l][k]+Min[k+1][r]+s[r]-s[l-1]);
}
}
}
MAX=max(MAX,Max[i][n+i-1]);
MIN=min(MIN,Min[i][n+i-1]);
}
cout<<MIN<<endl<<MAX;
return 0;
}
// 给定非负整数 n,求 2 n 的值。
#include <bits/stdc++.h>
using namespace std;
int main() {
long long n;
cin>>n;
int t=1;
for(int i=1;i<=n;i++){
t*=2;
}
cout<<t;
return 0;
}
```
#include<iostream>
#include<cstring>
using namespace std;
const int N=500+5;
int s[N];
int Max[N][N];
int Min[N][N];
int MAX=-1;
int MIN=1e9;
int main(){
int n;
cin>>n;
memset(Max,-0x3f,sizeof(Max));
memset(Min,0x3f,sizeof(Min));
for(int i=1;i<=n;i++){
cin>>s[i];
s[i+n]=s[i];
Max[i][i]=0;
Max[i+n][i+n]=0;
Min[i][i]=0;
Min[i+n][i+n]=0;
}
for(int i=1;i<=2*n;i++)s[i]+=s[i-1];
for(int i=1;i<=n;i++){
for(int len=2;len<=n;len++){
for(int l=i;l+len-1<=n+i-1;l++){
int r=l+len-1;
for(int k=l;k<r;k++){
Max[l][r]=max(Max[l][r],Max[l][k]+Max[k+1][r]+s[r]-s[l-1]);
Min[l][r]=min(Min[l][r],Min[l][k]+Min[k+1][r]+s[r]-s[l-1]);
}
}
}
MAX=max(MAX,Max[i][n+i-1]);
MIN=min(MIN,Min[i][n+i-1]);
}
cout<<MIN<<endl<<MAX;
return 0;
}
// 给定非负整数 n,求 2 n 的值。
#include <bits/stdc++.h>
using namespace std;
int main() {
long long n;
cin>>n;
int t=1;
for(int i=1;i<=n;i++){
t*=2;
}
cout<<t;
return 0;
}
```
全部评论
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
11-03 12:40
中山大学 Java 点赞 评论 收藏
分享