題目鏈結
區間dp好題,把區間dp的基本操作都用上了。(狀態轉移方程很多,見**吧)
#include#include#include#includeusing namespace std;
const int n=310;
int t,n,m,a[n],d,dp[n][n],f[n];
bool can[n][n];
mapmp;
int main()
{ //freopen("in.txt","r",stdin);
scanf("%d",&t);
while(t--)
{memset(f,0,sizeof(f));memset(can,0,sizeof(can));memset(dp,0,sizeof(dp));
scanf("%d%d",&n,&m);mp.clear();
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=m;i++)
scanf("%d",&d),mp[d]=1;
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
if(mp[a[j]-a[i]])can[i][j]=1;
for(int len=1;len<=n;len++)
for(int l=1;l+len<=n;l++)
{int r=l+len;
dp[l][r]=max(dp[l+1][r],dp[l][r-1]);//區間dp基操
if(can[l][r]&&dp[l+1][r-1]==(r-l-1))
dp[l][r]=max(dp[l][r],dp[l+1][r-1]+2);//如果端點構成等差,且中間取空了
for(int i=l;i區間dp好好好題
hdu5693D 遊戲 區間DP 暴力遞迴
主要的收穫是。如何優化你遞推式裡面不必要的決策 之前的 這個 在hdu超時了,這就對了。這個複雜度 但是這個思路非常地耿直。那就是只需要暴力列舉刪兩個和刪三個的情況,於是就非常耿直的列舉是哪兩個n 2,是哪三個n 3 include include include include using nam...
HDU5693 D Game 百度之星2A
連續消去 k 個數,可以表示為消去了若干次 2個數和消去了若干次 3 個數。即k 2 i 3 j,那麼可以消數字就變成了,每次可以消 2 個,或者 3個。f i j 代表i.j 這段數字可以全部消掉,那麼這個狀態可以由f i k and f k 1 j f i 1 j 1 and mark a i ...
題解 hdu 素數判定
素數判定 題目描述 對於表示式n 2 n 41,當n在 x,y 範圍內取整數值時 包括x,y 39 xinput 輸入資料有多組,每組佔一行,由兩個整數x,y組成,當x 0,y 0時,表示輸入結束,該行不做處理。output 對於每個給定範圍內的取值,如果表示式的值都為素數,則輸出 ok 否則請輸出...