hiho_offer收割18_题解报告_差第四题
I.求逆元
欧几里得方法
II.模拟
细心+耐心
*本人感悟:
自己的错误在于:
对于这道模拟题没有耐心静下来一字一字看题,一行一行调错,一步一步调试,我要引以为戒。
III.dp
f[i][j][k]=max(f[i-1][j][k],min(f[i-1][t][k-1])+value[i][k])
t=0,1,…,801
i为第i个曲子(长度为3)
j为至今已进行j次的和弦改变(j<=c(c为允许和弦改变的最多次数))
k为第k种和弦的方法
value[i][k]为用对第i个曲子用第k个和弦的不和谐值
本人想到的进一步优化(本题不用):
1.求出全程不能变音的最小值
2.对于某个变音方法,如果其值已经大于最小值,则该方法不能继续进行下去
具体操作:
把对应第1~i个曲子可以实现的和弦存放到数组,生成第1~i+1个曲子可以实现的和弦
时间复杂度:
i<=1000
j<=20
k<=802
对于每个i,k,求出一次min(f[i-1][t][k-1])即可
O(nk*802)
1000*20*802=16040000
可在一秒内解决
*另:注意数组维数的范围
如发现错误,可在各个位置设置“输出一个数”,看哪里不正常,那么就是哪里出错了
*测试数据:
如n=1000,k=20
其它全为0
判断是否数组开的正确
IV.
实际上,没多少斤两就不要想第四题了,看看题目和测试数据就知道是不想让你用简单方法拿点分了
反正不会做
下面是想法:
不同的分图没有边相连,不互相影响,可分开考虑
以k个点为标准点,分别考虑这k个点是否发生故障,除去??? 不行,2^k 太大了
有第i个点和有第j点,
当某边在/不在时
当某点在/不在时
当n很大时
当m很大时
极限数据:
100000个点,编号为前400的点,每个点之间都有一个边相连;剩下的点都仅与编号为1的点相连
1.
#include <stdio.h>
#include <stdlib.h> long s,t; void gcd(long x,long y)
{
if (y==)
{
s=;
t=;
return;
}
long r,q;
r=x/y;
gcd(y,x%y);
q=s;
s=t;
t=q-r*t;
} int main()
{
long a,b,p;
scanf("%ld%ld%ld",&a,&b,&p);
b=b%p;
gcd(p,b);
t=t%p+p;
printf("%ld\n",a*t%p);
return ;
}
2.
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h> struct node
{
long f[];
long a[];
}pai[]; long n; bool judge()
{
long j,k,g;
//
for (j=;j<;j++)
{
g=;
for (k=;k<n;k++)
g+=pai[k].f[j];
if (g==)
return true;
}
//
for (j=;j<n;j++)
if (pai[j].a[]>)
break;
if (j!=n)
{
for (j=;j<n;j++)
if (pai[j].f[]+pai[j].f[]+pai[j].f[]+pai[j].f[]>)
break;
if (j!=n)
{
for (j=;j<n;j++)
if (pai[j].f[]>)
break;
if (j==n)
return true;
}
}
//
for (j=;j<n;j++)
if (pai[j].a[]>)
break;
if (j!=n)
{
for (j=;j<n;j++)
if (pai[j].f[]+pai[j].f[]+pai[j].f[]+pai[j].f[]>)
break;
if (j!=n)
{
for (j=;j<n;j++)
if (pai[j].f[]>)
break;
if (j==n)
return true;
}
}
//
for (j=;j<n;j++)
if (pai[j].a[]>)
break;
if (j!=n)
{
for (j=;j<n;j++)
if (pai[j].f[]+pai[j].f[]+pai[j].f[]+pai[j].f[]>)
break;
if (j!=n)
return true;
}
return false;
} int main()
{
long c,g,t,i,j,k,sum[],tot[],num;
char s[];
scanf("%ld%ld",&n,&c);
for (i=;i<n;i++)
sum[i]=;
for (i=;i<n;i++)
tot[i]=;
num=;
for (i=;i<=c;i++)
{
scanf("%s",s);
if (strcmp(s,"Fruit")==)
{
tot[num]++;
sum[num]--;
for (j=;j<;j++)
pai[num].f[j]=;
for (j=;j<;j++)
pai[num].a[j]=;
scanf("%ld",&g);
for (j=;j<=g;j++)
{
scanf("%ld",&t);
pai[num].f[t]++;
}
num=(num+)%n;
}
else if (strcmp(s,"Animal")==)
{
tot[num]++;
sum[num]--;
for (j=;j<;j++)
pai[num].f[j]=;
for (j=;j<;j++)
pai[num].a[j]=;
scanf("%ld",&t);
pai[num].a[t]=;
num=(num+)%n;
}
else
{
scanf("%ld",&t);
if (judge()==true)
{
for (j=;j<n;j++)
sum[t]+=tot[j];
for (j=;j<n;j++)
{
tot[j]=;
for (k=;k<;k++)
pai[j].f[k]=;
for (k=;k<;k++)
pai[j].a[k]=;
}
}
else
{
sum[t]-=n;
for (j=;j<n;j++)
sum[j]++;
}
num=t;
}
//printf("%ld %ld %ld\n",sum[0],sum[1],sum[2]);
}
for (i=;i<n;i++)
printf("%ld\n",sum[i]);
return ;
}
3.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define maxf 10000000
//max=400*3000=1200000 long music[],value[][],f[][][],ch[]; long min(long a,long b)
{
if (a>b)
return b;
else
return a;
} int main()
{
long n,g,i,j,k,l,m,pr;
scanf("%ld%ld",&n,&g);
for (i=;i<=*n;i++)
scanf("%ld",&music[i]);
for (i=;i<=;i++)
{
j=i-;
l=;
m=;
for (k=;k<=n;k++)
{
m++;
value[m][i]=;
l++;
value[m][i]+=abs(j-music[l]);
l++;
value[m][i]+=abs(j+-music[l]);
l++;
value[m][i]+=abs(j+-music[l]);
}
} for (i=;i<=;i++)
{
j=i-;
l=;
m=;
for (k=;k<=n;k++)
{
m++;
value[m][i]=;
l++;
value[m][i]+=abs(j-music[l]);
l++;
value[m][i]+=abs(j+-music[l]);
l++;
value[m][i]+=abs(j+-music[l]);
}
} for (i=;i<=n;i++)
for (j=;j<=g;j++)
for (k=;k<;k++)
f[i][j][k]=maxf; for (k=;k<;k++)
f[][][k]=;
for (i=;i<=n;i++)
for (k=;k<;k++)
f[i][][k]=f[i-][][k]+value[i][k]; pr=maxf;
//
for (i=;i<=n;i++)
{
//0 <g
for (j=;j<min(i-,g);j++)
{
ch[j]=maxf;
for (k=;k<;k++)
ch[j]=min(ch[j],f[i-][j][k]);
}
//1(0 不用计算)
for (j=;j<=min(i-,g);j++)
{
for (k=;k<;k++)
{
f[i][j][k]=f[i-][j][k]+value[i][k];
if (j!=)
f[i][j][k]=min(f[i][j][k],ch[j-]+value[i][k]);
}
}
} for (j=;j<=g;j++)
for (k=;k<;k++)
pr=min(pr,f[n][j][k]); printf("%ld\n",pr);
return ;
}
by lzu_cgb
share & spread ideas
hiho_offer收割18_题解报告_差第四题的更多相关文章
- 2015浙江财经大学ACM有奖周赛(一) 题解报告
2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...
- cojs 强连通图计数1-2 题解报告
OwO 题目含义都是一样的,只是数据范围扩大了 对于n<=7的问题,我们直接暴力搜索就可以了 对于n<=1000的问题,我们不难联想到<主旋律>这一道题 没错,只需要把方程改一 ...
- cojs 二分图计数问题1-3 题解报告
OwO 良心的FFT练手题,包含了所有的多项式基本运算呢 其中一部分解法参考了myy的uoj的blog 二分图计数 1: 实际是求所有图的二分图染色方案和 我们不妨枚举这个图中有多少个黑点 在n个点中 ...
- 题解报告:hdu 1398 Square Coins(母函数或dp)
Problem Description People in Silverland use square coins. Not only they have square shapes but also ...
- 题解报告:hdu 2069 Coin Change(暴力orDP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2069 Problem Description Suppose there are 5 types of ...
- 题解报告:hdu 1028 Ignatius and the Princess III(母函数or计数DP)
Problem Description "Well, it seems the first problem is too easy. I will let you know how fool ...
- CF Educational Round 78 (Div2)题解报告A~E
CF Educational Round 78 (Div2)题解报告A~E A:Two Rival Students 依题意模拟即可 #include<bits/stdc++.h> us ...
- CF1169(div2)题解报告
CF1169(div2)题解报告 A 不管 B 首先可以证明,如果存在解 其中必定有一个数的出现次数大于等于\(\frac{m}{2}\) 暴力枚举所有出现次数大于等于$\frac{m}{2} $的数 ...
- CFEducational Codeforces Round 66题解报告
CFEducational Codeforces Round 66题解报告 感觉丧失了唯一一次能在CF上超过wqy的机会QAQ A 不管 B 不能直接累计乘法打\(tag\),要直接跳 C 考虑二分第 ...
随机推荐
- IHttpModule不起作用的两个原因
最近在将系统改造成微服务的过程中,需要对以前的Url请求做兼容性处理,于是就采用了HttpModules模型,但在测试中碰到IHttpModules模块不起作用. 一.IIS配置问题 我用的IIS7. ...
- 腾讯云CVM服务器怎么建网站
腾讯云云服务器CVM站在用户的角度看就相当于一台计算机,虽然实际上它是一个虚拟服务器,是一个大的云端服务器集群虚拟出来的一个虚拟服务器,在使用上直接当做一个实际的服务器即可.那么,对于一个新手菜鸟来说 ...
- 对JSON传递图片Base64编码的一点总结
项目中跟Java对接的时候需要传输图片,经过Base64编码后传输的. 但是实际调试的时候发现Java那边始终无法正常解析出图片. 冷静想想之后,发现问题在于使用OpenCV读取图片,编码的是Mat: ...
- 阿里云centos 安装禅道
下载 我的阿里云服务器系统是 centos6.8 64 位,下载的禅道版本是 Linux 64位一键安装包(适用于Linux 64位) 由于阿里云服务器没桌面,所以下载用不了浏览器,可考虑在本地下载后 ...
- idea创建web项目教程
官网下载idea,安装配置好后,双击进来,第一次创建项目时新建是这样的 第一步: 第二步:创建项目名和项目存放的路径 点finish进入这里 第三步: 第二步点OK进入这个页面,点上面那个加号 ...
- 自己动手写Impala UDF
本文由 网易云发布. 概述 出于对可扩展性和性能的考虑,UDF已变成大数据生态圈查询引擎的必备功能之一,无论是Calcite.Hive.Impala都对其进行支持,但是UDF的支持有利也有弊,好处在 ...
- 揭秘memset与sizeof的结合使用方法
memset与sizeof为什么经常结合起来用呢? 一.memset介绍 memset函数是C++中的一个函数,它将从给定地址开始,逐个字节刷内存,初始化它们为给定的参数. 基本用法: void * ...
- 假设检验,alpha,p值 通俗易懂的的理解。
假设检验: 一般原假设H0 :表是为 XXX和YYYY无显著差异,H1,是有显著差异. 如果我们定义alpha的值是0.05.意味着我们接受H0是真的但是我们却认为他是假的的概率. 这里你想想,这个值 ...
- Android开发环境(发展演变)
初步接触android,要安装android开发工具时是使用eclipse,这是因为百度靠前的搜索项是eclipse来开 发android,而且那时还不知道android studio. 首先是下载配 ...
- 基于Air800+Arduino+ESP8266的混合物联网开发
流程图如下: