題意:
求使數列程先遞增後遞減的形式需要去掉的數字個數。當然也可以直接遞減或者只遞減不遞增。
分析:
用最長遞增子串行的方法求,然後列舉兩個起點的位置即可。
#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...