1. 程式人生 > >BZOJ 3357 Usaco2004 等差數列 動態規劃

BZOJ 3357 Usaco2004 等差數列 動態規劃

題目大意:給定一個長度為n的序列,求最大等差子序列

令f[i][j]表示當前等差數列最後一個數為a[i],倒數第二個數為j的最長長度

則有f[i][a[j]]=max{2,f[j][a[j]*2-a[i]]+1}

注意n=1時輸出1

時間複雜度O(n^2logn)

#include <map>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define M 2020
using namespace std;
int n,ans,a[M];
map<int,int> f[M];
//f[i][j]表示當前等差數列最後一個數為a[i],倒數第二個數為j的最長長度
int main()
{
	int i,j;
	cin>>n;
	if(n==1) return cout<<1<<endl,0;
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(i=1;i<=n;i++)
		for(j=1;j<i;j++)
		{
			f[i][a[j]]=max(f[i][a[j]],2);
			f[i][a[j]]=max(f[i][a[j]],f[j][a[j]*2-a[i]]+1);
			ans=max(ans,f[i][a[j]]);
		}
	cout<<ans<<endl;
	return 0;
}


相關推薦

BZOJ 3357 Usaco2004 等差數列 動態規劃

題目大意:給定一個長度為n的序列,求最大等差子序列 令f[i][j]表示當前等差數列最後一個數為a[i],倒數第二個數為j的最長長度 則有f[i][a[j]]=max{2,f[j][a[j]*2-a[i]]+1} 注意n=1時輸出1 時間複雜度O(n^2logn) #inc

BZOJ 3357--[Usaco2004]等差數列(STL&DP)

out ++ long long \n fin 。。 putc names turn 3357: [Usaco2004]等差數列 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 516 Solved: 241[Subm

bzoj 3670 動物園 - kmp - 動態規劃

led sample name 參觀 const 測試數據 更強 %d can Description 近日,園長發現動物園中好吃懶做的動物越來越多了。例如企鵝,只會賣萌向遊客要吃的。為了整治動物園的不良風氣,讓動物們憑自己的真才實學向遊客要吃的,園長決定開

BZOJ】2655: calc 動態規劃+拉格朗日插值

size HR spa 數據 下標 轉移 一個 動態規劃 找規律 【題意】一個序列$a_1,...,a_n$合法當且僅當它們都是[1,A]中的數字且互不相同,一個序列的價值定義為數字的乘積,求所有序列的價值和。n<=500,A<=10^9,n+1<A<

bzoj 4767 兩雙手 - 動態規劃 - 容斥原理

題目傳送門   傳送門I   傳送門II 題目大意   一個無限大的棋盤上有一隻馬,設馬在某個時刻的位置為$(x, y)$, 每次移動可以將馬移動到$(x + A_x, y + A_y)$或者$(x + B_x, y + B_y)$。棋盤上有$n$個禁止位置不能經過,問馬從$(0,

BZOJ NOI 1999 釘子和小球 動態規劃+分數類

getc namespace += tchar std 有趣的 題目 小數 content 題目大意:不太好描寫敘述,自己看吧。。 思路:首先從最上面的點開始考慮。由於球一定是從最上面開始往下掉,所以球經過最上面的點的概率是1,然後他會有1/2的幾率向左,

bzoj 4321 queue2 - 動態規劃

數據 include win32 兩種 nbsp typename 由於 插入 位置 n 個沙茶,被編號 1~n。排完隊之後,每個沙茶希望,自己的相鄰的兩 人只要無一個人的編號和自己的編號相差為 1(+1 或-1)就行; 現在想知道,存在多少方案滿足沙茶們如此不苛刻的

bzoj 3875 騎士遊戲 - spfa - 動態規劃

全部 用法 += add 生活 win32 text als auto Description 【故事背景】 長期的宅男生活中,JYY又挖掘出了一款RPG遊戲。在這個遊戲中JYY會 扮演一個英勇的騎士,用他手中的長劍去殺死入侵村莊的怪獸。 【問題描述】

bzoj 3111 螞蟻 動態規劃

動態 格子 動態規劃 targe ora 說明 pic reg 規劃 題目描述 在一個 n*m 的棋盤上,每個格子有一個權值,初始時,在某個格子的頂點處一只面朝北的螞蟻,我們只知道它的行走路線是如何轉彎,卻不知道每次轉彎前走了多長。 螞蟻轉彎是有一定特點的,即它的轉彎序

小米oj 有多少個等差數列動態規劃

 有多少個等差數列? 序號:#20難度:困難時間限制:500ms記憶體限制:10M 描述 等差數列是常見數列的一種,如果一個數列從第二項起,每一項與它的前一項的差等於同一個常數,這個數列就叫做等差數列,而這個常數叫做等差數列的公差,公差常用字母d表示。即對於數列S,它滿足了(S

BZOJ P1037 [ZJOI2008]生日聚會Party【動態規劃

簡單四維DP: #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm>

bzoj 4770 圖樣 - 概率與期望 - 動態規劃

題目傳送門   傳送門I   傳送門II 題目大意   有一個$n$個點的完全圖,每個點的權值是$[0, 2^{m})$中的隨機整數,兩點間的邊的權值是兩點點權的異或和,問它的最小異或生成樹的邊權和的期望。   考慮求最大異或生成樹的分治做法,每次按最高位分成$V_0,V_1$

動態規劃】【最短路】[BZOJ 1003]物流運輸trans

簡直是醉了,這道題本來想了一會兒,然後看了看資料邊的數量頂天了才400然後時間最多才100那麼直接用SPFA 複雜度O(nm2)就可以過了,然後注意一下特別判定是否超過INF可能有資料很極限,判斷一下是

bzoj 1044: [HAOI2008]木棍分割 二分答案+動態規劃

題意:有n根木棍, 第i根木棍的長度為Li,n根木棍依次連結了一起, 總共有n-1個連線處. 現在允許你最多砍斷m個連接處, 砍完後n根木棍被分成了很多段,要求滿足總長度最大的一段長度最小, 並且輸出

bzoj 4870: [Shoi2017]組合數問題 動態規劃

題意 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 分析 拿到題目就開始狂推式子,看了題解才發現原來是dp。 我們從直觀上來理解我們

動態規劃-陣列中求最長等差數列的長度

題目:給定一個數組求出陣列最長等差數列的長度。 舉例:3,8,4,5,6,2 輸出:5。 思路:利用區間dp來做,dp[i][diff]的意思是 intAr[0]到intAr[i],等差為diff

BZOJ 2423: [HAOI2010]最長公共子序列|動態規劃

第一問直接dp求 if s1[i]==s2[j] then f[i][j]=f[i-1][j-1]+1 else f[i][j]=max(f[i][j-1],f[i-1][j]) 用g[i][j]來表

bzoj 2281: [Sdoi2011]黑白棋 博弈論+動態規劃+排列組合

題意 小A和小B又想到了一個新的遊戲。 這個遊戲是在一個1*n的棋盤上進行的,棋盤上有k個棋子,一半是黑色,一半是白色。 最左邊是白色棋子,最右邊是黑色棋子,相鄰的棋子顏色不同。 小A可以移動白

bzoj 4818: [Sdoi2017]序列計數 動態規劃+矩陣乘法

題意 Alice想要得到一個長度為n的序列,序列中的數都是不超過m的正整數,而且這n個數的和是p的倍數。 Alice還希望,這n個數中,至少有一個數是質數。 Alice想知道,有多少個序列滿足她的