【洛谷 2134】百日旅行

题目背景

重要的不是去哪里,而是和你在一起。——小红

对小明和小红来说,20142014 年 77 月 2929 日是一个美好的日子。这一天是他们相识 100100 天的纪念日。

(小明:小红,感谢你 22 场大考时默默的支持,100100 个日夜的陪伴;感谢你照亮我 100100 个美好的日子,给我留下无数美好的回忆……在这个美好的日子里,我准备带你去旅行。)

题目描述

小明和小红还剩下 nn 天的假期,小明可以安排旅行的计划。如果连续 xx 天旅游,小明需要花旅行费用 p \times x \times xp×x×x 元;如果连续 xx 天不旅游,小明需要请小红吃饭,花费为 q \times xq×x 元( p,qp,q 都是输入的常数)。

请你帮小明写一个程序,计算出假期里他至少需要花费多少元。

输入格式

输入只有一行,包含三个空格隔开的正整数 n,p,qn,p,q。

输出格式

一行,一个正整数表示小明至少需要花费多少元。

输入输出样例

输入 #1
6 1 7
输出 #1
20

说明/提示

数据规模与约定

  • 对于 20\%20% 数据,1 \le n \le 201n20。
  • 对于 90\%90% 数据,1 \le n \le 10^31n103,1 \le p \le 2 \times 10^31p2×103,1 \le q \le 10^41q104。
  • 对于 100\%100% 数据,1 \le n \le 2 \times 10^51n2×105,1 \le q \le p \le 10^41qp104。

题解:写(chao)了个90分代码,复习dpdpdp!!!争取拿到部分分!我现在冲着部分分来的。正解斜率优化与我无瓜

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
const int N=200004;
ll n,p,q,dp[2][N];
int main(){
    //freopen("2134.in","r",stdin);
    //freopen("2134.out","w",stdout);
    scanf("%d %d %d",&n,&p,&q);
    for(int i=1;i<=n;i++) dp[0][i]=dp[1][i]=0x3f3f3f3f;
    for(int i=1;i<=n;i++){
        for(int j=0;j<i;j++){
            dp[0][i]=min(dp[0][i],dp[1][j]+p*(i-j)*(i-j));
            dp[1][i]=min(dp[1][i],dp[0][j]+q*(i-j));
        }
    }
    cout<<min(dp[0][n],dp[1][n]);
    return 0;
}

 

posted @ 2020-10-27 20:52  #Cookies#  阅读(83)  评论(0)    收藏  举报