14
作者:
著雨
,
2024-05-23 00:38:44
,
所有人可见
,
阅读 9
差分离散化
火烧赤壁
#include<bits/stdc++.h>
using namespace std;
map<int,int> mp;
int res;
int main()
{
int n;
cin>>n;
while(n--)
{
int l,r;
scanf("%d%d",&l,&r);
mp[l]++,mp[r]--;
}
//离散化求前缀和
int last=0;
for(auto &it:mp) it.second+=last,last=it.second;
last=0;
bool st=false;
for(auto &it:mp)
{
if(it.second>0)
{
if(!st) last=it.first,st=true;
}
else
{
if(st) res+=it.first-last,st=false;
}
}
cout<<res;
return 0;
}
01背包求方案数
小A点菜
#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
int f[N];
int main()
{
int n,m;
cin>>n>>m;
f[0]=1;
for(int i=0;i<n;i++)
{
int v;
scanf("%d",&v);
for(int j=m;j>=v;j--) f[j]+=f[j-v];
}
cout<<f[m];
return 0;
}