題意:給出一列數對 ,求出其最長的不減序列的長度。
思路:最簡單的思路是採用lis,dp實現,nlogn的複雜度(注意不減和遞增的區別,二分查詢的條件要進行改變)。網上看到針對此題的另一種思路,直接對資料進行dp:此題的資料範圍為1~100,對資料dp的複雜度為o(100*100)。
lis的**:
#include #include #include #define max(a,b) ((a)>(b)?(a):(b))
#define n 10005
struct points[n];
int n,dp[n];
int search(int x,int high)
return low;
}int lis()
return len+1;
}int cmp(const void *x,const void *y)
int main(){
while(scanf("%d",&n) && n){
int i;
memset(s, 0, sizeof(s));
memset(dp, 0, sizeof(dp));
for(i = 0;i
資料dp**:
#include #include #define max(a,b) ((a)>(b)?(a):(b))
#define n 105
int s[n][n],dp[n][n];
int n;
int main(){
while(scanf("%d",&n) && n){
int i,j,a,b;
memset(s, 0, sizeof(s));
memset(dp, 0, sizeof(dp));
for(i = 0;i
poj3342 poj2342 樹形dp入門
poj3342 最近做樹形dp,渣渣 成喳喳喳辣,真是不開森。還是適合做基礎入門題。題意 比較好理解。就是一棵樹,選m個點,兒子和父親不能同時選。問最多能選多少個 題目中說的是上級,當然我這裡省略就是用父親節點和孩子結點表示啦 其實dp的內容很好想,d i 0 表示第i個點不選的結果,d i 1 表...
POJ 3254,POJ 1185(狀態壓縮DP)
poj 3254 corn fields 我們可以用二進位制列舉第一行狀態,用1代表在這種植,0代表不種植,第一行確定了,第二行就可以根據第一行不斷累加。dp row state 代表第row行用state狀態時的方法數。如果這個state合法,則dp row state dp row 1 stat...
POJ 狀態壓縮DP專題
poj3254 狀態壓縮dp的入門題。純粹的二維遞推,還可以通過滾動陣列優化,但這裡並不需要。include include include using namespace std int m,n,f 13 1 12 intmap 13 int in bool check int j,int k i...