• 数组分组(简单dp)


    一个长度为n的数组a,我们可以把它分成任意组,每一组是一段连续的区间。比如数组1,2,3,4,5可以分成(1,2),(3,4,5)两个组。

    每个分组都有一个权值,这个权值就是分组里面每个数的乘积对1000取模的结果。

    对于数组a的一个分组方案,总权值就是每个分组的权值和。

    name对于数组a,分组以后最大的权值和是多少?

    输入

    第一行一个n(<=1n<=1000)

    接下来一行n个整数,表示数组a,ai<=100

    输出

    数组最大的分组权值和

    简单dp?

    预处理 区间i-j的乘积和

    dp[i]:前i个分组最大权值和。

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    const int MAXN=1110;
    const int MOD=1000;
    int a[MAXN],n;
    int dp[MAXN];
    int pre[MAXN][MAXN];
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }
        for(int i=1;i<=n;i++){
            pre[i][i]=a[i];
            for(int j=i+1;j<=n;j++){
                pre[i][j]=pre[i][j-1]*a[j]%MOD;
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=0;j<i;j++){
                dp[i]=max(dp[i],dp[j]+pre[j+1][i]);
            }
        }
        cout<<dp[n]<<endl;
    
    
        return 0;
    }
    View Code
  • 相关阅读:
    spider-抓取页面内容
    Zabbix监控
    时间戳转换
    计算机脱域
    查询指定时间内审核失败的事件日志
    spider-抓取网页内容(Beautiful soup)
    Queue
    spider-抓取网页内容
    MyEclipse+Tomcat配置
    Gradle Java Web应用程序并在Tomcat上运行
  • 原文地址:https://www.cnblogs.com/lin1874/p/12333591.html
Copyright © 2020-2023  润新知