一些總結:
1)乙個數字若是分成任意數字求乘積和最大,則盡量全部分成3
2)分成兩個則是n/2
3)拆成n個,拆成這個數/n
4)不能重複,則優先拆為2,3,4…,剩餘▲x從後往前平分。
逆元應用:
求逆元:
inv[1]=1;//1的逆元顯然是1
for(i=2;i#include
#define max 1000000000
#define mod (1000000007ll)
//const __int64 mod=1000000007;//不能用define定義mod否則會出錯,define是乙個函式
using
namespace std;
__int64 f[
45000];
int sum[
45000];
int inv[
45000];
void
del(
)//printf("%d %d %d ***\n",inv[2],inv[3],inv[1]);
return;}
intmain()
k=n-sum[l]
;///printf("%d %d %d xx",sum[l],k,inv[l+1-k]);if(
2+k>l)
ans=f[l]
*inv[2]
%mod*
(k+2
)%mod,
printf
("%i64d\n"
,(ans+mod)
%mod)
;else
ans=f[l]
*inv[l+
1-k]
%mod*
(l+1
)%mod,
printf
("%i64d\n"
,(ans+mod)
%mod);}
}}return0;
}
HDU5976 貪心 逆元 字首和
大連區域賽的銅牌題,雖然只是銅牌題我也想了好一會,感覺這場區域賽挺不好打呀。貪心策略我是這樣想出來的,先令n 25把,寫成34567乘積最大,假如n被迫變小呢?34567 24567 23567 23467 23456,這樣最划算對吧,那麼接下來?23456 3457,因為長度被迫 1了,and t...
hdu5976 Detachment 逆元 優化
傳送門 題意 給定乙個數x,我們可以把這個數分解成乙個乙個的小的數字a1,a2,a3 定義s a1 a2 a3 問如何分解x使得s最大,並且不能有重複的數字 思路 分解成數量多的小的數字,比分解成數量少的大的數字的乘積更大,這一點我不知道怎麼證明 並且由基本不等式我們可以知道,相等和的兩個數,越接近...
HDU 5685 字首 逆元
題意 給出你雜湊值的計算方式,然後多次詢問子串的雜湊值。題解 我們通過觀察雜湊值的計算式子就可以發現是連乘,又是多次詢問,因此我們可以想到打表的方式。字首積即可。ans a,b dp b d p a 1 ans a,b frac ans a,b d p a 1 dp b 然後要注意到取模,所以需要乘...