題目:
對於a>1,將答案各位全置1,然後從高位到低位改成0判斷是否可行;
用f[i][j]陣列代表前i個數分成j組是否可行,轉移是列舉最後一段的左端點k,然後看看後面整個一段的和能否滿足要求,如果前後都滿足就表示i,j狀態也可行;
對於a=1,可以貪心地認為分組數量越少越好,所以可行性轉化為最優性,省去一維,轉移條件同上,取min即可;
先寫了個wa一半的版本:
#include#include囧後來又直接改成別的寫法a的,但還是不太明白原來的寫法為什麼不行,有什麼不同。#include
using
namespace
std;
typedef
long
long
ll;int
n,a,b,len;
ll f2[
2005],ans,s[2005
];bool f[105][105];//
可行性bool
dp1(ll x)
bool
dp2(ll x)
return f2[n]<=b;
}int
main()
}else
}printf(
"%lld
",ans);
return0;
}
**如下:
#include#include#include
using
namespace
std;
typedef
long
long
ll;int
n,a,b,len;
ll f2[
2005],ans,s[2005
];bool f[105][105];//
可行性ll dp1()
return
ans;
} ll dp2()
if(f2[n]<=b)ans-=(1ll<1
;
else ans++;
}return
ans;
}int
main()
APIO2015 巴厘島的雕塑
印尼巴厘島的公路上有許多的雕塑,我們來關注它的一條主幹道。在這條主幹道上一共有 nn 座雕塑,為方便起見,我們把這些雕塑從 11 到 nn 連續地進行標號,其中第 ii 座雕塑的年齡是 y iyi 年。為了使這條路的環境更加優美,想把這些雕塑分成若干組,並通過在組與組之間種上一些樹,來吸引更多的遊客...
BZOJ4069 APIO2015 巴厘島的雕塑
那麼只要存在 f n j tr ue a j b 第 st 位就能夠為0,更新 an s 這裡要列舉 st i,j k,時間複雜度 o n3log i 1nyi 然後發現最後乙個子任務被卡 這時 n 2000 注意到 a 1 我們特判這種情況,把dp的 j 這一維去掉,改為轉移選取組數的最小值 選取...
APIO 2015 耶加達的摩天樓
題目鏈結 演算法 考慮將每個 doge 向其所能到達的樓連邊 直接spfa求單源最短路可以獲得57分 那麼 怎樣拿到滿分呢?我們發現這張圖的邊的數量達到了nm的數量級 考慮分塊 將每個點拆成sqrt n 個點 將每個pi sqrt n 的點向 bi pi 連邊 這樣的邊不會超過n sqrt n 條 ...