2017-01-20_dp测试

题目:http://files.cnblogs.com/files/shenben/2017-01-20problems.pdf

数据包(含解题报告):http://files.cnblogs.com/files/shenben/2017-01-20_%E6%B5%8B%E8%AF%95%E5%8C%85.zip

plane

/*
f[nowx][nowy]=sigma(f[tox][toy]);
k=0:ans=sigma(f[nowx][nowy])
以上动态转移显然
全部数据要+ 二项式定理:bilibala……
//数学弱,日后再推吧
*/
#include<cstdio>
#define O3 __attribute__((optimize("O3")))
#define IN inline
using namespace std;
int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
    while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
    return x*f;
}
const int N=310,M=25,p=12345,inf=0x3f3f3f3f;
const int dx[4]={0,0,1,-1},dy[4]={1,-1,0,0};
int n,m,k,c[M][M],a[N][N],dp[N][N][M],t[M],ans[M];
bool vis[N][N];
O3 IN void dfs(int nowx,int nowy){
    vis[nowx][nowy]=1;
    for(int d=0;d<4;d++){
        int tox=nowx+dx[d],toy=nowy+dy[d];
        if(a[nowx][nowy]>a[tox][toy]){
            if(!vis[tox][toy]) dfs(tox,toy);
            t[0]=dp[tox][toy][0]+1;
            for(int i=1;i<=k;i++){
                t[i]=dp[tox][toy][i];
                for(int j=1;j<=i;j++){
                    t[i]+=((j&1)?1:-1)*c[i][j]*t[i-j];
                    t[i]%=p;
                }
            }
            for(int i=0;i<=k;i++){
                dp[nowx][nowy][i]+=t[i];
                dp[nowx][nowy][i]%=p;
            }
        }
    }
}
#define name "plane"
int main(){
    freopen(name".in","r",stdin);
    freopen(name".out","w",stdout);
    n=read();m=read();k=read();
    for(int i=0;i<=n+1;i++) a[i][0]=a[i][m+1]=inf;
    for(int i=1;i<=m;i++) a[0][i]=a[n+1][i]=inf;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            a[i][j]=read();
        }
    }
    for(int i=0;i<=k;i++){
        c[i][0]=1;
        for(int j=1;j<=i;j++){
            c[i][j]=c[i-1][j]+c[i-1][j-1];
            c[i][j]%=p;
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(!vis[i][j]) dfs(i,j);
            for(int t=0;t<=k;t++){
                ans[t]+=dp[i][j][t];
                ans[t]%=p;
            }
        }
    }
    for(int i=0;i<=k;i++) if(ans[i]<0) ans[i]+=p;
    for(int i=0;i<=k;i++)  printf("%d\n",ans[i]);
    fclose(stdin);fclose(stdout);
    return 0;
}

knapsack

/*
离线预处理:多重背包正扫一遍,反扫一遍
ans=max(f[k1][j]+f_rev[k1+2][t1-j]){0<=j<=t1}
attention:
    习惯了一维的二进制拆分,二位的多重背包居然不会了~~
*/
#include<cstdio>
#include<iostream>
using namespace std;
int read(){
    int x=0,f=1;char ch=getchar();
    while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
    while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
    return x*f;
}
const int N=1005;
int n,m,v[N],w[N],c[N],f[N][N],f_rev[N][N];
void pre_deal(){
    for(int i=1,tmp;i<=n;i++){
        tmp=c[i];
        for(int j=1;j<=1000;j++) f[i][j]=f[i-1][j];
        for(int j=1;tmp!=0;j<<=1){
            j=min(j,tmp);
            tmp-=j;
            for(int k=1000;k>=j*v[i];k--){
                f[i][k]=max(f[i][k],f[i][k-j*v[i]]+j*w[i]);
            }
        }
    }
    for(int i=n,tmp;i>=1;i--){
        tmp=c[i];
        for(int j=1;j<=1000;j++) f_rev[i][j]=f_rev[i+1][j];
        for(int j=1;tmp!=0;j<<=1){
            j=min(j,tmp);
            tmp-=j;
            for(int k=1000;k>=j*v[i];k--){
                f_rev[i][k]=max(f_rev[i][k],f_rev[i][k-j*v[i]]+j*w[i]);
            }
        }
    }
}
#define name "knapsack"
int main(){
    freopen(name".in","r",stdin);
    freopen(name".out","w",stdout);
    n=read();
    for(int i=1;i<=n;i++) v[i]=read(),w[i]=read(),c[i]=read();
    pre_deal();
    m=read();
    for(int k1,t1,ans;m--;){
        k1=read();t1=read();ans=0;
        for(int j=0;j<=t1;j++) ans=max(ans,f[k1][j]+f_rev[k1+2][t1-j]);
        printf("%d\n",ans);
    }
    fclose(stdin);fclose(stdout);
    return 0;
}

remainder

//思路很好懂,然而还要套二项式,~~
#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
const ll N=305,mod=905229641;
ll n,m,ans,sum,tmp,f[N][N*N/2];//f(i,j)=长为i,余数和为j
#define name "remainder"
int main(){
    freopen(name".in","r",stdin);
    freopen(name".out","w",stdout);
    cin>>n>>m;
    f[0][0]=1;
    for(int k=0;k<m;k++){
        for(int i=k;i>=0;i--){
            for(int j=k*(k-1)/2;j>=0;j--){
                f[i+1][j+k]+=f[i][j];
                f[i+1][j+k]%=mod;
            }
        }
    }
    for(int i=0;i<=m*(m-1)/2;i++){
        if((n-i)%m) continue;
        for(int j=1;j<=m;j++){
            tmp=(n-i)/m+j-1;
            tmp%=mod;
            sum=1;
            for(int k=1;k<j;k++){//C(n-tot+x-1,x-1)
                sum*=tmp;
                sum%=mod;
                tmp--;
            }
            sum*=j*f[j][i]%mod;
            sum%=mod;
            ans+=sum;
            ans%=mod;
        }
    }
    cout<<ans;
    fclose(stdin);fclose(stdout);
    return 0;
}
时间: 2024-08-26 23:31:39

2017-01-20_dp测试的相关文章

Mysql Innodb 性能参数设置 https://www.rathishkumar.in/2017/01/how-to-allocate-innodb-buffer-pool-size-in-mysql.html

参考原文: https://www.rathishkumar.in/2017/01/how-to-allocate-innodb-buffer-pool-size-in-mysql.html 查看系统cpu,内存,硬盘使用情况 1. cat /proc/cpuinfo 或者 更直观的查看cpu的型号命令:dmesg |grep -i xeon 查看内存的方法 2. cat /proc/meminfo 或者 更直观的查看内存的命令:free -m 查看硬盘大小 3.df -h 这里粘贴部分原文:

2017年度渗透测试神器TOP10

现在,安全研究者对网站或者应用程序进行渗透测试而不用任何自动化工具似乎已越来越难.因此选择一个正确的工具则变得尤为重要,正确的选择甚至占去了渗透测试成功半壁江山. 如果你在网络上搜索渗透测试工具,你会找到一大堆,其中不乏付费的.免费的.商业的以及开源的.但是,热门的测试工具都有哪些呢?这里我们将为大家梳理出2017年度十大最佳渗透测试工具. 之所以强调是本年度的,这点尤为重要,因为研究者使用的工具年复一年的都在发生着变化. Metasploit--独一无二,不可取代 Metasploit自200

2017.2.10测试 藏妹子之处

第二题  藏妹子之处(excel) 问题描述: 今天CZY又找到了三个妹子,有着收藏爱好的他想要找三个地方将妹子们藏起来,将一片空地抽象成一个R行C列的表格,CZY要选出3个单元格.但要满足如下的两个条件: (1)任意两个单元格都不在同一行. (2)任意两个单元格都不在同一列. 选取格子存在一个花费,而这个花费是三个格子两两之间曼哈顿距离的和(如(x1,y1)和(x,y2)的曼哈顿距离为|x1-x2|+|y1-y2|).狗狗想知道的是,花费在minT到maxT之间的方案数有多少. 答案模1000

2017.01.21

和昨天一道题都没做出来不一样.....今天写了五道题: 还是昨天没写完的二分查找验证,P1139和NOIP2015Day2T1题.犯的错误不少,比如check函数内计数的问题,跳石头和路由器安放的初始值不一样:主要是思路刚开始没想对,没有用二分,而且并不知道为什么要用二分.其实就是二分枚举直径/跳石头的距离.并且跳石头和路由器安放虽然策略一样,但是中间的check有不同,因为路由器是安装,跳石头是拆,所以实际上跳石头是 总数-拆的数 来进行验证: 然后是高级模运算,求(a1^b1+a2^b2..

2017年全球测试发展趋势调查笔记

2018年已开始1个月了,最近领导发了个问卷,从这个问卷上想想这个季度OKR设定什么方向较好.红旗标红的,将是我想达到的方向. 原文地址:https://www.cnblogs.com/yulia/p/8430733.html

bzoj 5120 [2017国家集训队测试]无限之环——网络流

题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5120 旋转的话相当于去掉一个插头.新增一个插头,所以在这两个插头之间连边并带上费用即可. 网格图可以黑白染色,转化为相邻格子间插头的匹配问题. 注意: 1.黑白染色不是移动一格就 fx = ! fx :每换一行,开头位置的颜色应该和上一行的开头不一样!不然有偶数列的话自己原来写的那个染色就崩了: 2. L 形的判断不是 d&(d>>1) 判断是否有两个相邻的1,如果是第一个位置和

2017 级课堂测试试卷—数据清洗进度记录

数据清洗:按照进行数据清洗,并将清洗后的数据导入hive数据库中 利用mapreduce完成将txt文件中数据存放在一个数组中,未成功连接hive数据库并存放在hive数据库中 目前完成代码: package org.apache.hadoop.examples; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.fs.Path; import org.apache.had

基于OpenCover进行代码覆盖率测试

最近开始接触白盒测试,开发同事对OpenCover(开源C#代码覆盖率统计工具).ReportGenerator(将XML报告转换成HTML的工具)二次开发出一个代码覆盖率的工具.下面基于该工具,记录对OpenCover.ReportGenerator等的理解. 未使用OpenCover时,被测程序的正常运行流程: 使用OpenCover.ReportGenerator后,被测程序的运行流程: OpenCover中的Profiler启动运行被测程序的程序或服务-->运行被测程序-->得到运行结

测试计划书

目录 1.简介………………………………………………………………………………………………………..2 1.1目的…………………………………………………………………………………………..2 1.2背景…………………………………………………………………………………………..2 1.3范围…………………………………………………………………………………………..2 2.测试参考文档和测试提交文档……………………………………………………..…………….2 2.1测试参考文档……………………………………………

2017年2月笔记

[阿里巴巴JAVA开发手册] https://segmentfault.com/p/1210000008272934 一个复杂系统的拆分改造实践 http://www.cnblogs.com/LBSer/p/6195309.html 搭建vue+webpack+mock脚手架(一) https://segmentfault.com/a/1190000008279215 微信LazyMan笔试题的深入解析和实现 http://www.jianshu.com/p/f1b7cb456d37 蚂蚁开源的