发现cf以前的好题真的很多。。

cf 730j 01背包变形 感觉很好的题

/*
先处理出最少需要t个瓶子
dp[i][j][k]前i个取k个,容量为j时的水的体积
滚动数组搞一下
本题的状态转移必须从合法的状态转移来,所以一定要初始化dp=-INF,并且要有起点dp[i][0][0]=0
其他就是比较类似的01背包了
*/
#include<bits/stdc++.h>
using namespace std;
int s,sum,t,n,a[],b[],tmp[],dp[][][];
int cmp(int a,int b){return a>b;} int main(){
cin>>n;
for(int i=;i<=n;i++)cin>>a[i],sum+=a[i];
for(int i=;i<=n;i++)cin>>b[i],tmp[i]=b[i],s+=b[i];
sort(tmp+,tmp++n,cmp);
int tot=sum;
while(tot>)tot-=tmp[++t];
//需要用t个瓶子
for(int i=;i<;i++)
for(int k=;k<=t;k++)
for(int j=;j<=s;j++)dp[i][j][k]=-0x3f3f3f3f;
int cur=;
dp[][][]=dp[][][]=;//初始状态
for(int i=;i<=n;i++){
for(int j=;j<=s;j++)
for(int k=;k<=min(i,t);k++)
if(j>=b[i])dp[cur][j][k]=max(dp[cur^][j][k],dp[cur^][j-b[i]][k-]+a[i]);
else dp[cur][j][k]=dp[cur^][j][k];//取不了第i件
cur^=;
}
int ans=;
for(int j=sum;j<=s;j++)
ans=max(ans,dp[cur^][j][t]);
cout<<t<<" "<<sum-ans;
}

cf852B 矩阵加速dp+组合计数

/*
矩阵优化dp
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 1000005
#define mod 1000000007
struct Mat{
ll a[][];
Mat(){memset(a,,sizeof a);}
}A;
ll n,a[maxn],b[maxn],c[maxn];
ll L,M,F[],cnt[];
void mul(ll F[],Mat A){
ll t[]={};
for(int i=;i<M;i++)
for(int j=;j<M;j++)
t[i]=(t[i]+A.a[i][j]*F[j])%mod;
memcpy(F,t,sizeof t);
}
Mat mulself(Mat A,Mat B){
Mat C;
for(int i=;i<M;i++)
for(int j=;j<M;j++)
for(int k=;k<M;k++)
C.a[i][j]=(C.a[i][j]+A.a[i][k]*B.a[k][j])%mod;
return C;
}
int main(){
cin>>n>>L>>M;
for(int i=;i<=n;i++)scanf("%lld",&a[i]);
for(int i=;i<=n;i++)scanf("%lld",&b[i]);
for(int i=;i<=n;i++)scanf("%lld",&c[i]),c[i]+=b[i];
for(int i=;i<=n;i++)F[a[i]%M]++;
for(int i=;i<=n;i++)cnt[b[i]%M]++;
for(int i=;i<M;i++)
for(int j=;j<M;j++)
A.a[i][j]=cnt[(i-j+M)%M];
L-=;
while(L){
if(L%)mul(F,A);
L>>=;A=mulself(A,A);
}
memset(cnt,,sizeof cnt);
for(int i=;i<=n;i++)cnt[c[i]%M]++;
ll ans=F[]*cnt[];
for(int i=;i<M;i++)
ans=(ans+F[i]*cnt[M-i])%mod;
cout<<ans<<endl;
return ;
}

cf630G 求不定方程的解个数+乘法原理 C(n+b-1,n-1)

#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll n;
int main(){
cin>>n;
ll ans=,ans1=,ans2=;
n+=;
ans1=n*(n-)*(n-)*(n-)*(n-)/;
n-=;
ans2=n*(n-)*(n-)/;
ans=ans1*ans2;
cout<<ans<<endl;
return ;
}

cf811C 给定n个元素,在上面取一些不交叉的段(选取规则:如果数值a在该段里,那么所有的数值a都要在该段里)[l,r]的贡献是里面不同数值元素的异或和

思路,处理出每个元素的范围,dp[i]表示扫描到第i个数的最优解,i可以不被放进段里,也可以放进段里,如果放进段里,就要枚举i所在的段的范围,那么枚举j:1->i,如果符合条件就更新答案

n^2来解决

#include<bits/stdc++.h>
using namespace std;
int ans,dp[],l[],r[],n,a[];
int main(){
cin>>n;
memset(l,0x3f,sizeof l);
for(int i=;i<=n;i++){
cin>>a[i];
l[a[i]]=min(l[a[i]],i);
r[a[i]]=max(r[a[i]],i);
}
for(int i=;i<=n;i++){
dp[i]=dp[i-];//不选择第i个的情况
int L=0x3f3f3f3f,R=,t=,flag[]={};
for(int j=i;j>=;j--){//选了第i个
L=min(L,l[a[j]]);R=max(R,r[a[j]]);
if(flag[a[j]]==)
flag[a[j]]=,t^=a[j];
if(L<j || R>i)continue;
dp[i]=max(dp[i],t+dp[j-]);
}
ans=max(dp[i],ans);
}
cout<<ans<<endl;
return ;
}

4.8cf自训的更多相关文章

  1. Java企业实训 - 01 - Java前奏

    前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...

  2. UML基础与Rose建模实训教程

    目  录 第1章  初识UML. 1 1.1 初识UML用例图... 1 1.2 初识UML类图... 3 第2章  Rational Rose工具... 6 2.1 安装与配置Rational Ro ...

  3. <实训|第六天>偷偷让新手的Linux无限重启附linux主机名称不是随便乱改的!

    先说个事情:这几天我正在忙一个项目的设计,8月1号之前要弄出来,所以每天都要弄到很晚,可能更新就有点跟不上了,不过我如果有时间的话,我就更新,没时间的话,我会在8月1号之后统一更新出来,希望大家谅解! ...

  4. <实训|第五天>通过搭建NFS,FTP实现共享文件附Vim脚本游戏

    先说个事情:我周末是不更新这个系列教程的,不过其他内容的会更新,我周末就整理这一周的各种内容到我的微信公众号中,提供给大家! 期待已久的linux运维.oracle"培训班"终于开 ...

  5. ThoughtWorks西邮暑期特训营 -- JavaScript在线笔试题

    ThoughtWorks 公司在西邮正式开办的只教女生前端开发的女子卓越实验室已经几个月过去了,这次计划于暑期在西邮内部开展面向所有性别所有专业的前端培训. 具体官方安排请戳:ThoughtWorks ...

  6. 软件工程实训项目案例--Android移动应用开发

    实训过程 角色分工 1.项目经理:负责项目的组织实施,制定项目计划,并进行跟踪管理 2.开发人员:对项目经理及项目负责 3.需求分析员:负责系统的需求获取和分析,并协助设计人员进行系统设计 4.系统设 ...

  7. <实训|第四天>Linux下的vim你真的掌握了吗?附上ftp远程命令上传。

    期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...

  8. <实训|第三天>Linux登录界面的修改以及Richard Stallman、自由软件运动

    在写博客之前我想说两点: 承认一个错误,昨天写的实训第二天,我把redhat6.7写成了Linux6.7,感谢热心人士的指出! 昨天写的文章名字太长了,今天改善,内容感觉表述不全,希望各位谅解! 官方 ...

  9. <实训|第二天>掌握linux6.7中安装vmware、vmware安装linux发行版本以及遇到的问题最后libreoffice的安装

    期待已久的linux运维.oracle"培训班"终于开班了,我从已经开始长期四个半月的linux运维.oracle培训,每天白天我会好好学习,晚上回来我会努力更新教程,包括今天学到 ...

随机推荐

  1. 【mmall】学习Spring要善用Spring的Github

    官网:https://projects.spring.io/spring-framework 宠物医院项目(非常经典的Spring项目):https://github.com/spring-proje ...

  2. eclipse中一些常见svn图标的含义

    项目视图   The Package Explorer view - 已忽略版本控制的文件.可以通过Window → Preferences → Team → Ignored Resources.来忽 ...

  3. 音乐app各部分笔记(一)

    7-11 播放器播放时间获取和更新 1.audio 有一个 ontimeupdate事件 播放过程中 随时触发 vue里面就是  @timeupdate   事件中有默认参数 e  通过e.targe ...

  4. 阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义

    分层领域模型规约: DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象. DTO( Data Transfer Object):数据传输对象,Service或Ma ...

  5. 20165221 Linux安装及命令入门学习

    安装过程 按照图文教程,进行操作,遇到如下问题. 1.安装ubuntu时从官网下载不成功. 最后在同学的帮助下,通过中文版网址入口进入,完成下载. 2.BIOS未恢复出厂设置,导致不能选择64-bit ...

  6. TCP通信实现对接硬件发送与接收十六进制数据 & int与byte的转换原理 & java中正负数的表示

    今天收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: 1.首先编写了一个简单的十六进制转byte[]数组与byte[]转换16进制字符串的两个方法,如下: /** * 将十 ...

  7. 【SVN】关于钩子的一些使用

    前一段时间,李总让我研究一下SVN钩子的使用,以前没接触过这方面东西,在这里记录一下. 何为钩子? 所谓SVN钩子就是一些与版本库事件发生时触发的程序,例如新修订版本的创建,或者是未版本化属性的修改. ...

  8. Python3-进程

    进程 什么是进程 进程调度 进程的并行与并发 进程的创建与结束 在python程序中的进程操作 守护进程 进程同步(multiprocess.Lock) 进程间通信——队列 生产者消费者模型 进程池和 ...

  9. Spring Boot默认Initializer(1)——ConfigurationWarningsApplicationContextInitializer

    ConfigurationWarningsApplicationContextInitializer的作用是用来报告Spring容器的一些常见的错误配置的.这个类中定义了两个内部类: 1. 定义了一个 ...

  10. Python os.chdir() 方法

    概述 os.chdir() 方法用于改变当前工作目录到指定的路径. 语法 chdir()方法语法格式如下: os.chdir(path) 参数 path -- 要切换到的新路径. 返回值 如果允许访问 ...