poj 幾道簡單的dp題

2022-08-12 13:33:12 字數 2438 閱讀 7749

題意:

求使數列程先遞增後遞減的形式需要去掉的數字個數。當然也可以直接遞減或者只遞減不遞增。

分析:

用最長遞增子串行的方法求,然後列舉兩個起點的位置即可。

#include

#include

#include

using

namespace

std;

const

int inf=1e8;

const

int n=1000+9;

void lis(int n,int d,double g,double a) //nlog(n)

}int d1[n],d2[n];

double a[n],b[n],g[n];

int n;

int main()

題意:

給出幾類珍珠,以及它們的單價,要求用最少的錢就可以買到相同數量的,相同(或更高)質量的珍珠。

【規定買任一類的珍珠n個(**為p),都要支付(n+10)*p的錢,即額外支付10*p】

分析:

f[i]表示到第i個品類最少花費。

那麼f[i]=min(j

#include

#include

#include

using

namespace

std;

const

int inf=1e8;

const

int n=100+9;

/*f[i]表示到第i個品類最少花費。

那麼f[i]=min

*/int n,ans;

int num[n],p[n],f[n];

int main()

f[0]=0;

for(int i=1;i<=n;i++)

f[i]=minn;

}printf("%d\n",f[n]);

}return

0;}

題意:

lcs變形題,根據lcs的思想去推dp方程即可。

#include

#include

using

namespace

std;

const

int mod=998244353;

const

int n=111;

int w[300][300],f[n][n];

char s1[111],s2[111];

int main()

}printf("%d\n",f[n1][n2]);

}return

0;}

題意:

給乙個字串,問最少插入幾個字元可以構成回文串?

分析:

求一下正串和逆串的最長公共子串行,就是最大可以匹配的,那麼最少插入的就是n-lcs。

這題n<=5000,用int f[n][n]會超記憶體,可以改成short,也可以用滾動陣列。

#include

#include

#include

using

namespace

std;

const

int n=5001;

char a[n],b[n];

short f[2][n];

int n;

int main()

}printf("%d\n",n-f[k][n]);

return

0;}

題意:

給出乙個整數序列,求最大的兩段連續序列和。

分析:

類似於poj1836那題,求一下從左端開始的最大序列和f[i],從右端開始的最大序列和d[i]。然後列舉中點即可。

f[i]表示從左端到i點的一段最大的連續序列和

d[i]表示從右端到i點的一段最大的連續序列和

#include

#include

#include

using

namespace

std;

const

int inf=5e8;

const

int n=50001;

int f[n],d[n],a[n];

int n;

int main()

sum=maxn=d[n]=a[n];

for(int i=n-1;i>=1;i--)

int ans=-inf;

for(int i=1;i1]);

}printf("%d\n",ans);

}return0;}

/*3101 -1 2 2 3 -3 4 -4 5 -5

21 -1

31 -1 2

*/

poj 幾道簡單的搜尋題 (一)

題目 poj 2488 a knight s journey 題意 給乙個m n的棋盤,馬走日,給出一條字典序最小的馬的路線來走完整個棋盤?分析 如果能走完棋盤,那麼從 1,1 點dfs即可,因為他能走完整個棋盤嘛,總有一步會經過 1,1 所以從 1,1 出發就能到其他所有點。為了保證字典序,在列舉...

幾道黑書上的簡單DP題

這幾道經典的題本不應再由本菜囉嗦,無奈手癢總想貼點 poj1141 括號的匹配 dp i j 表示從i到j使括號匹配完整的最少需要新增的括號,有 dp i i 1 dp i j min dp i k k 1 j 當s i s j 或者s i s j 時,dp i j min dp i j dp i ...

poj 幾道簡單的二分題

題意 有n個數,劃分成m塊,和最大的一塊最小是多少?分析 最大值最小問題,二分答案。include using namespace std typedef long long ll const int n 1e5 9 int a n n,m bool ok int x else if k 0 ret...