牛客OI周賽15 普及組部分題解

2021-10-04 18:46:25 字數 1123 閱讀 9143

b.三角形

給定n個盒子,每個盒子中有一定數量的寶物,現在你每次可以從乙個盒子中拿取乙個寶物,這樣就會有很多種不同的價值和結果。現在問你前k小的價值結果的和是多少?

n<=100,k<=10000,假設盒子中最多寶物數量為m,保證k<=n*m<=10000。寶物價值不超過100.

首先這個題容易被資料範圍誤導,雖然每個盒子中最多可能有m<=100個物品,但是你最多從盒子中拿走乙個物品,也就是說最後的結果sum<=n*100的,最大就是10000。這樣分析一下資料範圍,就可以想到方案數揹包了(因為k最多也就10000),dp(i,sum)表示前i個盒子中拿物品,和為sum的方案數,這樣複雜度為o(n * m * sum),最大為1e8左右。

#include #include #include #include #include #include #define int long long 

using namespace std;

const int maxn=10000+10;

int dp[101][maxn];

int mp[101][101];

signed main()

sum+=maxx;

}//printf("sum %lld\n",sum);

dp[0][0]=1;

for(int i=1;i<=n;i++)}}

}int cnt=0;

int res=0;

//printf("debug %lld\n",dp[n][1]);

for(int i=1;i<=sum;i++)}}

return 0;

}

d:多元組

定義乙個k元組為

現在給定乙個數列,問你數列中最多有多少個k元組?對1e9+7取模

n<=1e5,k<=50.

首先思考乙個經典的問題:逆序對問題。逆序對問題是k=2時的特殊情況,當n<=1e5時逆序對可以用樹狀陣列快速求解。那麼我們如何從二元組推三元組的情況呢?對於乙個數a[i],他能組成三元組的情況,一定可以從在他之前,且值比他小的二元組的情況推導過來。

所以,令dp(i,j)表示前i個元素中,組成j元組的情況的個數,那麼遞推式就很明顯了

return 0;

}

牛客OI周賽14 普及組全部題解

eg 好久不見的普及組題目,自信滿滿以為自己ak了,結果c題莫名被卡常 後來開了氧氣優化就過了,我一直以為氧氣優化評測機會自己開不用手動開 d題公式精度問題被卡,最後rk14,btw牛客一場上綠還是很高興的嘿嘿嘿。傳送門題意 統計乙個字串裡有多少個不同的字元。題解 map或者set隨便搞。inclu...

牛客OI周賽9 普及組

目錄a題 b題 c題 小q挺喜歡擼串的,沒錯,字串!你給小q送上了n個字串 對於乙個字串s,如果在小q擼掉 刪除 任意個字元之後,nowcoder 是其子串,則這個字串s是可擼的。小q最近切題切到手軟,想擼串散散心。如果你給他呈現的字串是可擼的,他會很開心,否則他會很桑心。輸入描述 乙個整數n,表示...

牛客OI周賽14 普及組

菜的真實,普及都 ak 不掉.score 100 100 100 0 300 rank 16 看來 pj t1 考字串讀入成鐵上釘釘了?考慮開桶 a 記錄 ascii 為 i 的字元是否出現即可。includeusing namespace std typedef long long ll cons...