20pts求调
查看原帖
20pts求调
747178
mamoumou楼主2024/3/29 18:31

只过了1、3两个点

f[i][j] 表示从i开始的j个数

#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
const int maxn=100;
long long f[maxn][maxn],num[maxn],n,m,ans=0,sum;
inline long long llmin(long long x,long long y){
	if(x>y) return y;
	else return x;
}
inline long long llmax(long long x,long long y){
	if(x<y) return y;
	else return x;
}
int main(){
	scanf("%lld%lld",&n,&m);
	for(int q=1;q<=n;q++){
		memset(f,0,sizeof(f));
		for(int i=1;i<=m;i++){
			scanf("%lld",&num[i]);
			f[i][1]=num[i]*2;
		}
		for(int i=2;i<=m;i++){
			for(int j=1;j<=m-i+1;j++){
				for(int k=1;k<i;k++){
					if(f[j][k]>f[j+k][i-k]){
						sum=f[j][k]*pow(2.0,llmin(k,i-k))+f[j+k][i-k];
					}else{
						sum=f[j+k][i-k]*pow(2.0,llmin(k,i-k))+f[j][k];
					}
					f[j][i]=llmax(f[j][i],sum);
				}
			}
		}
		ans+=f[1][m];
	}
	printf("%lld",ans);
	return 0;
}

第二组输入:

5 5
0 0 0 0 0
0 0 0 0 1
876 1 566 920 598
259 945 123 659 997
176 478 293 464 278

输出:

118214

我的代码的输出:

123252

蒟蒻求调!

2024/3/29 18:31
加载中...