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_题解报告_差第四题的更多相关文章

  1. 2015浙江财经大学ACM有奖周赛(一) 题解报告

    2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制 ...

  2. cojs 强连通图计数1-2 题解报告

    OwO 题目含义都是一样的,只是数据范围扩大了 对于n<=7的问题,我们直接暴力搜索就可以了 对于n<=1000的问题,我们不难联想到<主旋律>这一道题 没错,只需要把方程改一 ...

  3. cojs 二分图计数问题1-3 题解报告

    OwO 良心的FFT练手题,包含了所有的多项式基本运算呢 其中一部分解法参考了myy的uoj的blog 二分图计数 1: 实际是求所有图的二分图染色方案和 我们不妨枚举这个图中有多少个黑点 在n个点中 ...

  4. 题解报告:hdu 1398 Square Coins(母函数或dp)

    Problem Description People in Silverland use square coins. Not only they have square shapes but also ...

  5. 题解报告:hdu 2069 Coin Change(暴力orDP)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2069 Problem Description Suppose there are 5 types of ...

  6. 题解报告: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 ...

  7. CF Educational Round 78 (Div2)题解报告A~E

    CF Educational Round 78 (Div2)题解报告A~E A:Two Rival Students​ 依题意模拟即可 #include<bits/stdc++.h> us ...

  8. CF1169(div2)题解报告

    CF1169(div2)题解报告 A 不管 B 首先可以证明,如果存在解 其中必定有一个数的出现次数大于等于\(\frac{m}{2}\) 暴力枚举所有出现次数大于等于$\frac{m}{2} $的数 ...

  9. CFEducational Codeforces Round 66题解报告

    CFEducational Codeforces Round 66题解报告 感觉丧失了唯一一次能在CF上超过wqy的机会QAQ A 不管 B 不能直接累计乘法打\(tag\),要直接跳 C 考虑二分第 ...

随机推荐

  1. 20155320 Exp9 Web安全基础

    20155320 Exp9 Web安全基础 [实验后回答问题] (1)SQL注入攻击原理,如何防御 SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗 ...

  2. Android开发——异步任务中Activity销毁时的问题

    0.  前言 在Android开发中经常会发生Activity的销毁重建,比如用户长时间接听一个电话后回到APP.在Android开发--Fragment知识整理(二)中我们提到了使用Fragment ...

  3. Hadoop日记Day4---去除HADOOP_HOME is deprecated

    去除hadoop运行时的警告 1. 档hadoop运行时,我们会看到如下图1.1所示的警告. 图 1.1 2. 虽然不影响程序运行,但是看到这样的警告信息总是觉得自己做得不够好.一步步分析,先看一下启 ...

  4. linux 升级 5.0.2内核

    1.下载 wet https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.2.tar.xz -o /usr/src/ cd /usr/src ta ...

  5. 移动端H5页面上传图片或多张图片

    传统PC网页上传文件,大家都已经熟悉,这里不做介绍. 本文简单介绍移动端常用上传图片功能.灵活使用轮询或长连接可实现PC与移动端数据同步,即PC端需要上传的图片是移动拍照下来或移动端硬盘储存的,不需要 ...

  6. laraver框架学习------工厂模型填充测试数据

    在laravel中填充数据有几种方式.一种是Seeder,另一种是工厂模式进行的填充. 工厂模式可以实现大批量的填充数据,数据的量可以自定义.这也为后续的软件测试提供方便. 在laravel框架有da ...

  7. 杂谈---LZ的编程之路以及十点建议

    LZ本人是09年毕业的,在某二流本科院校学的非计算机专业,在兴趣的驱使之下,最终毅然决然的走上了编程这一条“不归路”. 说起LZ的经历虽不算是跌宕起伏,但也真正算是人生无常. 当初09年7月回到家里, ...

  8. kubernetes部署mysql

    第一章 部署K8S集群 https://www.cnblogs.com/zoulixiang/p/9504324.html 第二章 1.新建mysql-rc.yaml vi mysql-rc.yaml ...

  9. Hybrid APP基础篇(二)->Native、Hybrid、React Native、Web App方案的分析比较

    说明 Native.Hybrid.React.Web App方案的分析比较 目录 前言 参考来源 前置技术要求 楔子 几种APP开发模式 概述 Native App Web App Hybrid Ap ...

  10. 【Alpha】第一次Scrum Meeting

    本次会议内容概括如下: 总结了一周以来大家任务的完成情况,对消耗时间进行统计,并评估了各自对团队的贡献(影响)程度 整理并融合所有人的工作的结果生成了相应的总结性文档 进一步明确了团队中各个成员的定位 ...