我是超連結
無dp暴力:60pts
不行啊這個n^2,我還是用dp吧,f[i]表示前i個手上的數(必選i)的最大值:80pts
emmm看來是爆longlong了。。確實有乙個比longlong更大的,但是我們還是用科學的方法吧
很容易發現特徵值是不降的,那麼也可以發現分數是不降的
如果上一位的特徵值小於0,那上一位肯定帶不來什麼好貢獻,並且也可以知道前面的特徵值全都是小於0的常數列(除第一位),那這一位小朋友的分數就是第二位小朋友的分數
如果上一位的特徵值大於0,那肯定會增加貢獻,就直接是上一位小朋友的特徵值+分數
最後還需要比較一下最大的小朋友和第一位小朋友的值,正因為要找到最大的小朋友,我們不能在更新值的時候直接取模,還要先確認比第一位小朋友大
#include
#include
#include
#define ll long long
#define n 1000005
using
namespace
std;
const ll inf=1e18;
ll ss[n],tz[n],fs[n],f[n],p;
int main()
bool vv=0;
fs[1]=ss[1];fs[2]=ss[1]*2;
if (fs[1]<=fs[2]) vv=1;
for (i=3;i<=n;i++)
if (tz[i-1]>0)
else fs[i]=fs[2];
if (!vv) printf("%lld",fs[1]%p);
else
printf("%lld",fs[n]%p);
}
小朋友的數字(NOIP2013 普及組第三題)
有 n 個小朋友排成一列。每個小朋友手上都有乙個數字,這個數字可正可負。規定每個小朋友的特徵值等於排在他前面 包括他本人 的小朋友中連續若干個 最少有乙個 小朋友手上的數字之和的最大值。作為這些小朋友的老師,你需要給每個小朋友乙個分數,分數是這樣規定的 第乙個小朋友的分數是他的特徵值,其它小朋友的分...
2013NOIP普級組 小朋友的數字
很顯然,這是乙個最大欄位和問題,但是要注意的是在算每個小朋友的分數的時候是會爆longlong的,我們注意到小朋友的特徵值和分數是遞增的,手動進行模擬特徵值和分數可以得出 如果要求的小朋友的分數的上乙個小朋友的特徵值是大於等於零的,那麼往後的時候每乙個小朋友的分數都為他上乙個小朋友的分數加上特徵值。...
小朋友的數字
小朋友的數字 用動態規劃用fcur i 表示以座標i為右端點的區間最大和 f i 表示前i個元素中的區間最大和,也就是特徵值 轉移方程見 然後求解過程也很簡單 但是注意,簡單加減會導致爆longlong,所以,如果確定f 1 不是最大值,那麼就在過程中,對求出的最大值進行取模,以防爆longlong...