1. 程式人生 > >atcoder A - Frog 1(DP)

atcoder A - Frog 1(DP)

A - Frog 1


Time Limit: 2 sec / Memory Limit: 1024 MB

Score : 100100 points

Problem Statement

There are NN stones, numbered 1,2,,N1,2,…,N. For each ii (1iN1≤i≤N), the height of Stone ii is 

hi">hihi.

There is a frog who is initially on Stone 11. He will repeat the following action some number of times to reach Stone NN:

  • If the frog is currently on Stone ii, jump to Stone i+1i+1 or Stone i+2i+2. Here, a cost of 
|">|hihj||hi−hj| is incurred, where jj is the stone to land on.

Find the minimum possible total cost incurred before the frog reaches Stone NN.

Constraints

  • All values in input are integers.
  • 2N1052≤N≤105
hi≤104">1hi1041≤hi≤104

Input

Input is given from Standard Input in the following format:

NN
h1h1 h2h2  hNhN

Output

Print the minimum possible total cost incurred.


Sample Input 1 Copy

Copy
4
10 30 40 20

Sample Output 1 Copy

Copy
30

If we follow the path 11 → 22 → 44, the total cost incurred would be |1030|+|3020|=30|10−30|+|30−20|=30.


Sample Input 2 Copy

Copy
2
10 10

Sample Output 2 Copy

Copy
0

If we follow the path 11 → 22, the total cost incurred would be |1010|=0|10−10|=0.


Sample Input 3 Copy

Copy
6
30 10 60 10 60 50

Sample Output 3 Copy

Copy
40

If we follow the path 11 → 33 → 55 → 66, the total cost incurred would be |3060|+|6060|+|6050|=40|30−60|+|60−60|+|60−50|=40.

 

題目連結:https://atcoder.jp/contests/dp/tasks/dp_a

題意:給你一堆石頭,每一個石頭有一個高度,有一隻青蛙站在第一個石頭上,青蛙每一次可以跳1-2個石頭,並且產生起跳高度和落地高度的差的消耗。

問你青蛙跳到第N個石頭,最小需要消耗多少能量?

 

思路:

簡單的線性DP, 定義dp[i]的狀態意義為青蛙跳到第i個石頭的時候消耗的最小能量,

轉移方程即為:dp[i]=min(dp[i-2]+abs(a[i]-a[i-2]),dp[i-1]+abs(a[i]-a[i-1]))

初始狀態定義: dp[1] = 0 ,  dp[2]=| a[2]-a[1] |

dp[2]一定要預處理,狀態轉移只能從i=3開始,因為第二個石頭只能由第一個石頭跳過去。

不這樣定義會wa的。(親測,23333)

我的AC程式碼:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
#define rep(i,x,n) for(int i=x;i<n;i++)
#define repd(i,x,n) for(int i=x;i<=n;i++)
#define pii pair<int,int>
#define pll pair<long long ,long long>
#define gbtb ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define MS0(X) memset((X), 0, sizeof((X)))
#define MSC0(X) memset((X), '\0', sizeof((X)))
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define gg(x) getInt(&x)
using namespace std;
typedef long long ll;
inline void getInt(int* p);
const int maxn=1000010;
const int inf=0x3f3f3f3f;
/*** TEMPLATE CODE * * STARTS HERE ***/
ll n;
ll dp[maxn];
ll a[maxn];
int main()
{
    gbtb;
    cin>>n;
    repd(i,1,n)
    {
        cin>>a[i];
    }
    dp[1]=0;
    dp[0]=0;
    dp[2]=abs(a[2]-a[1]);
    repd(i,3,n)
    {
        dp[i]=min(dp[i-2]+abs(a[i]-a[i-2]),dp[i-1]+abs(a[i]-a[i-1]));

    }
    cout<<dp[n];
    return 0;
}

inline void getInt(int* p) {
    char ch;
    do {
        ch = getchar();
    } while (ch == ' ' || ch == '\n');
    if (ch == '-') {
        *p = -(getchar() - '0');
        while ((ch = getchar()) >= '0' && ch <= '9') {
            *p = *p * 10 - ch + '0';
        }
    }
    else {
        *p = ch - '0';
        while ((ch = getchar()) >= '0' && ch <= '9') {
            *p = *p * 10 + ch - '0';
        }
    }
}

 

相關推薦

atcoder A - Frog 1DP

A - Frog 1 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There are NN stones, numbe

atcoder B - Frog 2 DP

B - Frog 2 Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement There are NN stones, numbe

Codeforces VK Cup Finals #424 Div.1 A. Office KeysDP

class clu define codeforce -a off blog ffi color   顯然是不可能交叉取鑰匙的,於是把鑰匙和人都按坐標排序就可以DP了   鑰匙可以不被取,於是f[i][j]表示前i個鑰匙被j個人拿的時間   f[i][j]=min(f[

AtCoder:Infinite Sequencedp

F - Infinite Sequence Time limit : 2sec / Memory limit : 256MB Score : 1000 points Problem St

Codeforces 933 A. A Twisty Movement dp

Description A dragon symbolizes wisdom, power and wealth. On Lunar New Year’s Day, people model a

[luoguP3052] [USACO12MAR]摩天大樓裏的奶牛Cows in a SkyscraperDP

摩天大樓 close 技術 printf opera col cli 裏的 pen 傳送門 輸出被閹割了。 只輸出最少分的組數即可。 f 數組為結構體 f[S].cnt 表示集合 S 最少的分組數 f[S].v  表示集合 S 最少分組數下當前組所用的最少容

[luoguP1373] 小a和uim之大逃離DP

htm line target light eve str tdi bsp for 傳送門 題解 代碼 #include <cstdio> #include <iostream> #define N 802 #define

ACdream 1216 ASC訓練1 Beautiful PeopleDP

rac popu 後來 math cst mat put ring stream 題目地址:http://acdream.info/problem?pid=1216 這題一開始用的是線段樹。後來發現查詢的時候還須要DP處理。挺麻煩。。也就不了了之了。。後來想到,這

CF 713C Sonya and Problem Wihtout a LegendDP

can 一個數 ica BE 大於 req arr sts ger 原版題意:給定一個序列,每次操作給其中一個數$+1$或$-1$,問最少需要多少操作使得整個序列為不下降序列。 題解:不下降序列最後修改完成後的各個數一定是原序列中的某一個數。關於這個的理解看到網上的一個解

ACM-ICPC 2017 Asia Urumqi:A. CoinsDP 組合數學

pri text -m 16px thml fir several while stack Alice and Bob are playing a simple game. They line up a row of nn identical coins, all wit

A Question of IngestionDp

ger cti some ngs arch can rom def ase A Question of Ingestion 時間限制: 1 Sec 內存限制: 128 MB提交: 95 解決: 26[提交] [狀態] [討論版] [命題人:admin] 題目描述 St

Atcoder AGC015E : Mr.Aoki IncubatorDP

傳送門 題解: 因為看錯題浪費了3個小時。。 按照 x x x排序後對於每個

51Nod 1158 - 全是1的最大子矩陣DP

題目連結 http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1158 【題目描述】 給出1個M*N的矩陣M1,裡面的元素只有0或1,找出M1的一個子矩陣M2,M2中的元素只有1,並且M2的面積是最大的。輸出M2的面

A Spy in the Metro dp

A Spy in the Metro   Secret agent Maria was sent to Algorithms City to carry out an especially dangerous mission. After several thrilling eve

洛谷 P1164 小A點菜 dp

題目背景 uim神犇拿到了uoi的ra(鐳牌)後,立刻拉著基友小A到了一家……餐館,很低端的那種。 uim指著牆上的價目表(太低階了沒有選單),說:“隨便點”。 題目描述 不過uim由於買了一些輔(e)輔(ro)書,口袋裡只剩MM元(M \le 10000)(M≤10

全是1的最大子矩陣DP

【題目描述】 給出1個M*N的矩陣M1,裡面的元素只有0或1,找出M1的一個子矩陣M2,M2中的元素只有1,並且M2的面積是最大的。輸出M2的面積。 Input 第1行:2個數m,n中間用空格分隔(2 <= m,n <= 500) 第2 - N +

Gym 101933 Adp

傳送門: 題面: A. Altruistic Amphibians time limit per test 3.0 s memory limit per test 512 MB input standard input output standard ou

Atcoder C - Vacation DP

C - Vacation Time Limit: 2 sec / Memory Limit: 1024 MB Score : 100100 points Problem Statement Taro's summer vacation starts tomo

atcoder CODE FESTIVAL 2017 qual A 手速

       這個比賽看起來好像挺重要的,,(結果來了一眾大佬誰都打不過qaq)        A,B題不知道是幹什麼的        C題(其實也是不知道在幹什麼)就是給一個字母矩陣,重排列後問是否

hihoCoder 1338 : A Gamedp

A Game Time limit:1000ms Memory limit:256MB Problem Description Little Hi and Little Ho are playing a game. There is an in