数组分组(计蒜客)
标准的动态规划的问题,先求出,任意两个数之间的余数,再调用动态规划即可得出。
#include<iostream> #include<math.h> using namespace std; int s[1000][1000]; int dp[1005]; int main() { int n; cin>>n; for(int i=1;i<=n;i++) { cin>>s[i][i]; } for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) { s[i][j]=s[i][j-1]*s[j][j]%1000; } dp[0]=0; dp[1]=s[1][1]; for(int i=2;i<=n;i++) for(int j=0;j<i;j++) { dp[i]=max(dp[i],dp[j]+s[j+1][i]); } cout<<dp[n]<<endl; return 0; }