最小值错误 求助。
查看原帖
最小值错误 求助。
1296826
lcfollower楼主2024/7/15 09:40

rt。。。

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define db double
#define inf 0x3f3f3f3f
#define infi 0x3f3f3f3f3f3f3f3fll
#define _Dark_Star exit(0)
#define up(i,x,y) for(register int i=x;i<=y;++i)
#define dn(i,x,y) for(register int i=x;i>=y;--i)
#define max(a,b) a > b ? a : b

using namespace std;

inline int read(){int x=0;bool f=0;char ch=getchar();while(!isdigit(ch)){f|=(ch=='-');ch=getchar();}while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),ch=getchar();return (f?-x:x);}
inline void write(int x){if(x<0)putchar('-'),x=-x;if(x>9)write(x/10);putchar(x%10|48);}
inline void writeln(int x){write(x),putchar('\n');}
inline void writesp(int x){write(x),putchar(' ');}
const int N = 105;
int n ,m , a[N] ,dp[N][N][10][2];

inline int _(int x){
  return ((x % 10) + 10) % 10;
}signed main(){
  n = read() , m = read();
  up(i,1,n) a[i] = read() ,a[i + n] = a[i];
  up(i,1,n << 1) a[i] += a[i - 1];
  up(k,1,m) up(i,1,n << 1) up(j,1,n << 1) dp[i][j][k][0] = inf;
  up(i,1,n << 1) dp[i][i][1][0] = a[i] - a[i - 1];
  up(i,1,n << 1) up(j,1,n << 1) dp[i][j][1][1] = _(a[j] - a[i - 1]);
  up(l,2,m){
    up(len ,2, n)
      up(i,1,n * 2 - len + 1){
        int j = i + len - 1;
        up(k,i,j - 1){
          dp[i][j][l][0] = min(dp[i][j][l][0] ,dp[i][k][l - 1][0] * _(a[j] - a[k]));
          dp[i][j][l][1] = max(dp[i][j][l][1] ,dp[i][k][l - 1][1] * _(a[j] - a[k]));
		}
	  }	
  }
  int ans_min = INT_MAX ,ans_max = 0;
  up(i,1,n)
  //	writeln(dp[i][i + n - 1][m][0]) ,
    ans_min = min(ans_min , dp[i][i + n - 1][m][0]) ,
	ans_max = max(ans_max ,dp[i][i + n - 1][m][1]);
  writeln(ans_min) ,writeln(ans_max);
  return 0;
}
2024/7/15 09:40
加载中...