随笔分类 -  模板

摘要:因为每组至多选择一个物品,可以将每组看做一个整体,这样就类似于01背包问题。 用f(i,j)表示前i组物品放入一个容量不超过j的背包可以获得的最大价值。 对于第i组物品: 不放入第i组物品,f(i,j)=f(i1,j) 放入第i组的第k个物品,\(f(i 阅读全文
posted @ 2020-10-02 22:32 Dazzling! 阅读(215) 评论(0) 推荐(0) 编辑
摘要:暴力拆分 暴力拆分就是把第i种物品看做si个独立的物品,每个物品只有一个,转化为01背包问题。 const int N=110; int f[N]; int n,m; int main() { cin>>n>>m; for(int i=1;i<=n;i++) { int v,w,s; ci 阅读全文
posted @ 2020-10-02 22:25 Dazzling! 阅读(96) 评论(0) 推荐(0) 编辑
摘要:状态表示:f(i,j)表示从前i个物品中选,总体积不超过j的情况下的最大价值。 和01背包一样,完全背包问题的每种物品都有两种策略,但是也有不同点。 对第i件物品来说: 不放第i件物品,那么f[i][v]= f[i- 1][v], 这步跟01背包是一样的。 放第i件物品。这里的处理和01 阅读全文
posted @ 2020-09-19 17:31 Dazzling! 阅读(107) 评论(0) 推荐(0) 编辑
摘要:状态表示:f(i,j)从前i个物品中选,总体积不超过j的情况下的最大价值 (蓝书上定义的是总体积为j的最大价值,初始化时要作出相应的修改) 状态转移: 选第i个物品:f(i,j)=f(i1,jvi)+wi 不选第i个物品:\(f(i,j)=f(i-1,j)\ 阅读全文
posted @ 2020-09-19 17:17 Dazzling! 阅读(112) 评论(0) 推荐(0) 编辑
摘要:acwing800 const int N=100010; int a[N],b[N]; int n,m,x; int main() { cin>>n>>m>>x; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<m;i++) cin>>b[i]; int 阅读全文
posted @ 2020-08-26 08:51 Dazzling! 阅读(192) 评论(0) 推荐(0) 编辑
摘要:acwing799 const int N=100010; int a[N]; int n; int main() { cin>>n; for(int i=0;i<n;i++) cin>>a[i]; unordered_map<int,int> mp; int l=0,r=0; int ans=0; 阅读全文
posted @ 2020-08-25 22:45 Dazzling! 阅读(180) 评论(0) 推荐(0) 编辑
摘要:一维差分 const int N=1e5+10; int a[N],b[N]; int n,m; int main() { cin>>n>>m; for(int i=1;i<=n;i++) { cin>>a[i]; b[i]=a[i]-a[i-1]; } while(m--) { int l,r,x 阅读全文
posted @ 2020-08-25 21:01 Dazzling! 阅读(150) 评论(0) 推荐(0) 编辑
摘要:一维前缀和 const int N=1e5+10; int a[N],sum[N]; int n,m; int main() { cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) sum[i]=sum[i-1]+a[i 阅读全文
posted @ 2020-08-25 20:48 Dazzling! 阅读(157) 评论(0) 推荐(0) 编辑
摘要:归并排序求逆序对 const int N=1e5+10; int a[N],b[N]; int n; LL ans; void merge(int l,int r) { if(l>=r) return; int mid=l+r>>1; merge(l,mid); merge(mid+1,r); in 阅读全文
posted @ 2020-08-25 18:46 Dazzling! 阅读(153) 评论(0) 推荐(0) 编辑
摘要:归并排序 const int N=1e5+10; int a[N],b[N]; int n; void merge_sort(int l,int r) { if(l>=r) return; int mid=l+r>>1; merge_sort(l,mid); merge_sort(mid+1,r); 阅读全文
posted @ 2020-08-25 17:26 Dazzling! 阅读(80) 评论(0) 推荐(0) 编辑
摘要:快速排序 const int N=1e5+10; int a[N]; int n; void quick_sort(int l,int r) { if(l>=r) return; int i=l-1,j=r+1,x=a[l+r>>1]; while(i<j) { while(a[++i]<x); w 阅读全文
posted @ 2020-08-25 17:18 Dazzling! 阅读(144) 评论(0) 推荐(0) 编辑
摘要:第k个数 const int N=1e5+10; int a[N]; int n,k; int quick_sort(int l,int r,int k) { if(l>=r) return a[l]; int i=l-1,j=r+1,x=a[l+r>>1]; while(i<j) { while( 阅读全文
posted @ 2020-08-25 17:13 Dazzling! 阅读(145) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示