zoukankan      html  css  js  c++  java
  • hdu 5586 Sum 基础dp

    Sum

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)


    Problem Description
    There is a number sequence A1,A2....An,you can select a interval [l,r] or not,all the numbers Ai(lir) will become f(Ai).f(x)=(1890x+143)mod10007.After that,the sum of n numbers should be as much as possible.What is the maximum sum?
     
    Input
    There are multiple test cases.
    First line of each case contains a single integer n.(1n105)
    Next line contains n integers A1,A2....An.(0Ai104)
    It's guaranteed that n106.
     
    Output
    For each test case,output the answer in a line.
     
    Sample Input
    2 10000 9999 5 1 9999 1 9999 1
     
    Sample Output
    19999 22033
     
    Source
    题目链接:点击传送
    思路:基础dp;
       dp[i][0]表示dp前边没有改成f的总和
       dp[i][1]表示可以继续改成f的总和;
       dp[i][2]表示不可以继续改成f的总和;

    dp[i][0]=dp[i-1][0]+a[i];
    dp[i][1]=max(dp[i-1][1]+b[i],dp[i-1][0]+b[i]);
    dp[i][2]=max(dp[i-1][2]+a[i],dp[i-1][1]+a[i]);

       b=f(a);

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<string>
    #include<queue>
    #include<algorithm>
    #include<stack>
    #include<cstring>
    #include<vector>
    #include<list>
    #include<set>
    #include<map>
    using namespace std;
    #define ll long long
    #define pi (4*atan(1.0))
    #define eps 1e-14
    #define bug(x)  cout<<"bug"<<x<<endl;
    const int N=1e5+30010,M=1e6+10,inf=2147483647;
    const ll INF=1e18+10,mod=2147493647;
    ll a[N],b[N],dp[N][4];
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            for(int i=1;i<=n;i++)
                scanf("%d",&a[i]),b[i]=(1890*a[i]+143)%10007;
            dp[0][0]=dp[0][1]=dp[0][2]=0;
            for(int i=1;i<=n;i++)
            {
                dp[i][0]=dp[i-1][0]+a[i];
                dp[i][1]=max(dp[i-1][1]+b[i],dp[i-1][0]+b[i]);
                dp[i][2]=max(dp[i-1][2]+a[i],dp[i-1][1]+a[i]);
            }
            printf("%lld
    ",max(dp[n][2],max(dp[n][0],dp[n][1])));
        }
        return 0;
    }
  • 相关阅读:
    Datatables 在asp.net mvc中的使用
    nexus离线安装索引及一些问题
    享元模式
    My97DatePicker的使用
    oracle定时器,调用存储过程,定时从n张表中取值新增到本地一张表中
    oracle触发器,一个表新增、修改的同时同步另一张表
    plsql客户端显示菜单等
    telnet测试制定地址端口号
    mybatis新增数据后获取自增主键
    ajax提交表单
  • 原文地址:https://www.cnblogs.com/jhz033/p/6627345.html
Copyright © 2011-2022 走看看