赞
踩
现求出任意两数之间的余数再动态规划。
dp[i]
其中i是第几个数
#include <iostream> using namespace std; int n; int s[1010][1010]; int dp[1010]; int main() { 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; } // namespace std;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。