牛客网 【每日一题】5月20日题目 简单瞎搞题
比賽鏈接
文章目錄
- 題目描述
- 題解:
- 代碼:
題目描述
輸入描述:
第一行一個(gè)數(shù) n。 然后 n 行,每行兩個(gè)數(shù)表示 li,ri。
輸出描述:
輸出一行一個(gè)數(shù)表示答案。
示例1
輸入
輸出
26備注:
1 ≤ n , li , ri ≤ 100
題解:
xi的是在 [li , ri]中任選一個(gè),然后構(gòu)成值,所以可以用分組背包來(lái)做
dp[i][j]前i個(gè)數(shù)字能否構(gòu)成j
那么dp [ i -1 ] [ j - x[ i ]* x [ i ] ] = = 1則說(shuō)明加上第i個(gè)數(shù)則可以構(gòu)成,x [ i ] 的取值范圍 是題目所給 l[i]和r[i]
這樣做肯定不行,哪那么簡(jiǎn)單
復(fù)雜度過(guò)高,我們需要壓縮下
先注意dp的值無(wú)疑是0或1,所以可以用bitset.
bitset 在 bitset 頭文件中,它是一種類似數(shù)組的結(jié)構(gòu),它的每一個(gè)元素只能是0或1,每個(gè)元素僅用1bit空間。
這樣,我們用dp [ i ]表示第i行的01串
dp [ i ]= dp [ i ] | ( d p [ i - 1 ] < < ( x [ j ] 2 ) )
bitset還有自帶的求1的個(gè)數(shù)的count,這樣就更方便了
代碼:
#include<bits/stdc++.h> #include<bitset> using namespace std; typedef long long ll; int num1,num2; const int maxn=130; int a[maxn]; bitset<1000009>dp[130]; int n; int main(){ cin>>n;dp[0][0]=1;for(int i=1;i<=n;i++){int l,r;cin>>l>>r;for(int j=l;j<=r;j++)dp[i]|=(dp[i-1]<<(j*j));}cout<<dp[n].count();return 0; }總結(jié)
以上是生活随笔為你收集整理的牛客网 【每日一题】5月20日题目 简单瞎搞题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 网站跳出率怎么计算(网站跳出率怎么计算的
- 下一篇: 牛客网 【每日一题】5月21日题目 图的