首页 > 其他分享 >P3089 [USACO13NOV] Pogo-Cow S

P3089 [USACO13NOV] Pogo-Cow S

时间:2024-07-22 18:50:57浏览次数:9  
标签:star P3089 Cow int USACO13NOV ans last mx dp

原题链接

题解

暴力dp:
遍历 \(i,j,k\) ,\(dp[i][j]=\max(dp[j][k])+v_i\) 其中 \(x_i-x_j\geq x_j-x_k\)

优化:
对于 \(j\) 来说 ,随着 \(i\) 越大, \(k\) 可以越小,因此省去了遍历一层 \(k\) ,而是维护每个点的 \(k\) ,(反正求的是最大值)

细节

1.有两个方向
2.任意起点

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;

struct node
{
    int x,v;
}star[1005];

int mx[1005]={0},last[1005];
int dp[1005][1005]={0};

bool cmp1(node a,node b)
{
    return a.x<b.x;
}
bool cmp2(node a,node b)
{
    return a.x>b.x;
}


void solve()
{
    int n;
    cin>>n;

    int ans=0;
    for(int i=1;i<=n;i++)
    {
        cin>>star[i].x>>star[i].v;
        ans=max(ans,star[i].v);
    }

    sort(star+1,star+1+n,cmp1);
    for(int i=1;i<=n;i++)
    {
        last[i]=i-1;
        mx[i]=star[i].v;
        for(int j=1;j<i;j++)
        {
            while(last[j]>0&&star[i].x-star[j].x>=star[j].x-star[last[j]].x)
            {
                mx[j]=max(mx[j],dp[j][last[j]]);
                last[j]--;
            }
            dp[i][j]=mx[j]+star[i].v;
            ans=max(ans,dp[i][j]);
            //printf("i:%d   j:%d  dp:%d\n",i,j,dp[i][j]);
        }
        dp[i][i]=star[i].v;
       // printf("i:%d   j:%d  dp:%d\n",i,i,dp[i][i]);
    }


    sort(star+1,star+1+n,cmp2);

    for(int i=1;i<=n;i++)
    {
        last[i]=i-1;
        mx[i]=star[i].v;
        for(int j=1;j<i;j++)
        {
            while(last[j]>0&&star[j].x-star[i].x>=star[last[j]].x-star[j].x)
            {
                mx[j]=max(mx[j],dp[j][last[j]]);
                last[j]--;
            }
            dp[i][j]=mx[j]+star[i].v;
            ans=max(ans,dp[i][j]);
          //  printf("i:%d   j:%d  dp:%d\n",i,j,dp[i][j]);
        }
        dp[i][i]=star[i].v;
       // printf("i:%d   j:%d  dp:%d\n",i,i,dp[i][i]);
    }

    cout<<ans;
}
int main()
{
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    int t=1;
    //cin>>t;
    while(t--) solve();
    return 0;
}

标签:star,P3089,Cow,int,USACO13NOV,ans,last,mx,dp
From: https://www.cnblogs.com/pure4knowledge/p/18316671

相关文章

  • mailcow邮件服务器的安全防护措施有哪些?
    mailcow邮件服务器如何搭建?邮件服务器的优势特点?mailcow邮件服务器是一款功能强大的开源电子邮件服务器套件,旨在为用户提供高效、安全的邮件服务。为了确保邮件服务器的安全,mailcow邮件服务器采取了一系列的安全防护措施,AokSend将详细探讨这些措施。mailcow邮件服务器:访问控......
  • qcow2恢复案例
    确认文件和进程信息:使用lsof命令确认虚拟机进程正在使用已删除的qcow2文件,并记录文件描述符和虚拟机进程ID(例如3914和11u)。sudolsof|grepdeleted复制文件内容:使用文件描述符路径复制已删除的qcow2文件到一个新的目标位置。例如,假设文件描述符路径为/proc/3914/fd/11,将文件......
  • 题解:SP11469 SUBSET - Balanced Cow Subsets
    SP11469(折半搜索)题目大意:给出$N$个数,求可以被分成两个和相等的集合的子集数。思路分析:首先考虑朴素的DFS,每个数有三种情况:选为$A$集合,选为$B$集合,两个集合都不选。暴力DFS时间复杂度为$3^{20}$。观察到$N$很小,而$3^{10}$是可以通过本题的,于是考虑折半搜索。我......
  • 使用Docker部署mailcow开源邮件系统详细过程
    1.项目介绍项目网站:mailcow:dockerized–Blog根据官方介绍,这个项目名称是mailcow,名称都是小写的。下面内容是通过AI翻译自官方文档:mailcow:dockerizeddocumentationmailcow:dockerized是一个基于Docker的开源组件/电子邮件套件。mailcow依赖于许多广为人知且长期......
  • Cows in a Skyscraper G
    dfs版本#include<algorithm>#include<iostream>usingnamespacestd;constintN=2e1;intcat[N],cab[N];intn,w;intans;boolcmp(inta,intb){returna>b;}voiddfs(intnow,intcnt){if(cnt>=ans){re......
  • POJ 3278 Catch That Cow
    题目链接:POJ3278【atchThatCow】思路    将起点放入队列,然后一次取出队列中的元素,对其进行左右移动和乘2的移动,并判断移动后的位置是否合法,合法则放入队列中继续操作。每次取出队列中的元素后,通过假设剩下的步骤全部是左右移动一格来更新结果。代码#include<io......
  • P2901 [USACO08MAR] Cow Jogging G (拓扑序+归并排序)
    P2901[USACO08MAR]CowJoggingG拓扑序+归并排序容易看出图是有向无环图,考虑在拓扑序上维护每个点的\(k\)短路。假如遍历到\(u\),有边\((u,v,w)\),\(u\),\(v\)各自有自己的\(k\)短路,我们需要将\(u\)上的\(k\)短路加\(w\)后与\(v\)上排序,然后去前\(k\)小。直接做......
  • P7411 [USACO21FEB] Comfortable Cows S (搜索)
    P7411[USACO21FEB]ComfortableCowsS搜索容易知道任意时刻的不合法的位置,并且决策只有将空着的位置补起来。每次加入一个点,判断其自身、上下左右是否变得不合法,往下递归即可。复杂度分析,每个点只会不合法一次(修改后就变得合法),所以只会遍历一次,复杂度是\(O(n^2)\)。#inclu......
  • P8271 [USACO22OPEN] COW Operations S (思维)
    P8271[USACO22OPEN]COWOperationsS思维题遇到不明白的操作,尝试在纸上模拟操作过程,找到性质。第一种操作目前没有什么特别的,有一个它不会改变字符的奇偶性。重点是第二个。我们容易发现CO->W->OC这样的过程,它实现了相邻位置的互换,这个性质正是冒泡排序的过程,所以字符的排......
  • 有趣的Python库——CowSay
    有趣的Python库——CowSay安装:pipinstallcowsay命令式使用:cowsay-cpig-t你好,我是一只猪哦!输出:__________|你好,我是一只猪哦!|==========\\\\,.(_|,......