2015-10-06 21:49:54
這題說的是個給了乙個陣列,然後刪除任意起點的乙個連續的l個數,然後求最長遞增子串行《是遞增,不是非遞減》,用乙個樹狀陣列維護一下就ok了
#include #includeview code#include
#include
#include
using
namespace
std;
const
int maxn=100005
;int
a[maxn],b[maxn];
int dp[maxn][2
];int num[maxn][3
],n;
int lowbit(int
x)void add(int loc, int v,int
op)}
int sum(int loc, int
op)
return
ans;
}int
main()
if(l==n)
b[n]=a[id]-1
; sort(b,b+(n+1
)); n=unique(b,b+(n+1))-b;
memset(num,
0,sizeof
(num));
for(int i=0; i)
int ans=0
;
for(int i=0; i)
if(i-l>=0
)
if(i>=l)
if(n-l>i)
ans=max(max(dp[i][0],dp[i][1
]),ans);
}printf(
"case #%d: %d\n
",cc,ans);
}return0;
}
hdu 2227 樹狀陣列 dp
題意是求乙個數列的不遞減的子串行的個數 很顯然,如果只用dp來做的話時間是o n n 因為dp i 為前i個數可能的方案,則狀態轉移方程為dp i sum dp j j 先對num按數來進行排序,這道題因為資料較大 用到了離散化 因為更新是是按原序更新的,及i之前的num j 一定比num i 小,...
hdu5125 樹狀陣列 dp
hdu5125 他說的是n個人每個人都有兩個氣球a,b,氣球各自都有相應的體積,現在讓他們按照序號排列好來,對他們的a氣球體積值計算最長上公升子串行,對於這整個排列來說有m次機會讓你將a氣球替換成b氣球 允許不使用完 問最後的最長上公升子串行 的長度是多少,哈哈,當然用dp的思想我們很容易就能知道狀...
hdu 5542(樹狀陣列優化dp)
題意 求n個數中長度為m的上公升子串行的個數 解題思路 dp i j 表示第i個數長度為j的上公升序列的個數。dp i j sum,這裡的時間複雜度有o n 會超時,所以這裡要有優化。其實可以將a i 離散化,對於每乙個j,構造乙個樹狀陣列,這樣求sum就可以用樹狀陣列的求和了,時間複雜度可以降為o...