首页 > 其他分享 >POJ - 3186 Treats for the Cows(DP)

POJ - 3186 Treats for the Cows(DP)

时间:2023-04-07 11:05:48浏览次数:32  
标签:int ll 3186 num POJ 数组 Cows include dp


题目大意:给你一个数组,每次你可以取两个数中的一个进行操作,要么取数组的第一个,要么数组的最后一个(取完之后,该数删除)
假设取出来的数组组成了A
现在要求使Sum = A[1] * 1 + A[2] * 2 + A[3] * 3 … + A[n] * n达到最大

解题思路:用dp[i][j]表示前面取了i个,后面取了j个最大值
则转移方程dp[i][j] = max(dp[0][i + j - 1] * (i + j) * num[j], dp[1][i + j - 2] * (i + j - 1) * num[j - 1]。。。)

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 2010;
#define ll long long

ll num[N], dp[N][N];
int n;

void init() {
    for (int i = 1; i <= n; i++)
        scanf("%lld", &num[i]);
}

void solve() {

    memset(dp, 0, sizeof(dp));
    dp[1][0] = num[1];
    dp[0][1] = num[n];

    for (int i = 2; i <= n; i++)
        for (int j = 0; j <= i; j++) {
            if (j == 0) {
                dp[j][i] = dp[j][i - 1] + num[n - i + 1] * i;
            }
            else if (j == i){
                dp[j][0] = dp[j - 1][0] + num[j] * i; 
            }
            else { 
                dp[j][i - j] = max(dp[j - 1][i - j] + num[j] * i, dp[j][i - j - 1] + num[n - i + j + 1] * i);
            }
        }
    ll ans = 0;
    for (int i = 0; i <= n; i++)
        ans = max(dp[i][n - i], ans);
    printf("%lld\n", ans);
}

int main() {
    while (scanf("%d" , &n) != EOF) {
        init();
        solve();
    }
    return 0;
}


标签:int,ll,3186,num,POJ,数组,Cows,include,dp
From: https://blog.51cto.com/u_10970600/6175571

相关文章

  • POJ - 1661 Help Jimmy(DP)
    题目大意:中文题解题思路:因为是垂直下降,所以就可以将问题转变成从降落的平台到地面的最小时间因为只能从平台的左边或者右边才可以离开平台,所以可以分别计算出从左边和从右边到达地面的最短时间,并记录#include<cstdio>#include<cstring>#include<algorithm>usingnamespace......
  • POJ - 3616 Milking Time(DAG)
    题目大意:给出N头牛的产奶时间段和产奶量,每接完一头牛的奶后,需要休息R分钟问如何选择牛,才能使接到的产奶量达到最大解题思路:DAG,按产奶的结束时间大小排序#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;constintN=1010;structInterval{......
  • 【POJ1679】The Unique MST(非严格次小生成树)
    problem给出一个连通无向图,判断它的最小生成树是否唯一如果唯一,输出生成树的大小,否则输出”NotUnique!”solution直接求非严格次小生成树如果次小生成树等于最小生成树则说明最小生成树不唯一,否则最小生成树一定是唯一的vector会TLE。。。codes#include<iostream>#include<algori......
  • POJ 2773 Happy 2006 二分+容斥原理(二进制枚举或dfs)
    Happy2006TimeLimit: 3000MS MemoryLimit: 65536KTotalSubmissions: 14003 Accepted: 4946DescriptionTwopositiveintegersaresaidtoberelativelyprimetoeachotheriftheGreatCommonDivisor(GCD)is1.Forinstance,1,3,5,7,9...areallrelativel......
  • The Suspects POJ - 1611 (并查集)
    题意:n个学生分属m个团体,一个学生可以属于多个团体。一个学生疑似患病则它所属的整个团体都疑似患病。已知0号学生疑似患病,以及每个团体都由哪些学生构成,求一共多少个学生疑似患病。分析:维护一个并查集,查询与0在同一集合的元素数量。#include<iostream>#include<cstdio>using......
  • POJ--3187 Backward Digit Sums(暴搜/减枝)
    记录5:302023-3-25http://poj.org/problem?id=3178reference:《挑战程序设计竞赛(第2版)》第二章练习题索引p135DescriptionFJandhiscowsenjoyplayingamenta......
  • POJ-2559-Largest Rectangle in a Histogram-DP或者单调栈
    ProblemE LargestRectangleinaHistogram TimeLimit:2000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):2498......
  • POJ - 3321 Apple Tree
    原题链接思路答案不好直接维护,所以,我们可以采用DFS序来解决这一问题。设\(l_u\)是以\(u\)为根的子树中最小的时间戳,\(r_u\)是以\(u\)为根的子树中最大的时间戳......
  • Can not set java.lang.String field com.jsedc.log.pojo.entity.voSyslogV0.happenT
    未加泛型约束的result,其List中的实体对象会被序列化为LinkedHashMap,实际结构为Result<List<LinkedHashMap<String,String>>>导出excel时对象赋值失败......
  • [POJ] 2251地牢大师
    来源:《信息学奥赛一本通》,POJ2251算法标签BFS题目描述你现在被困在一个三维地牢中,需要找到最快脱离的出路!地牢由若干个单位立方体组成,其中部分不含岩石障碍可以直接通......