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. 20155304《网络对抗》Exp8 Web基础

    20155304<网络对抗>Exp8 Web基础 实践要求 (1).Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的H ...

  2. cmake源码包安装后的卸载问题

    cmake源码包安装 CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程),具体学习请移步官网CMake 本文介绍的就是用cmake去安装的别人的包. 一般流程: ...

  3. Java技术——String类为什么是不可变的

    0. 前言   如果一个对象,在它创建完成之后不能再改变它的状态,包括对象内的成员变量.基本数据类型的值等等.那么这个对象就是不可变的.众所周知String类就是不可变的.转载请注明出处为SEU_Ca ...

  4. 让Visual Studio载入Symbol(pdb)文件

    让Visual Studio载入Symbol(pdb)文件 让Visual Studio载入Symbol(pdb)文件 在VC编译工程的编译连接阶段,会产生Symbol文件,也就是常说的 pdb 文件 ...

  5. Java 多线程(二)之 Thread 优先级

    目录 Thread 中线程优先级相关属性 相关函数 优先级初始化 设置优先级 获取优先级 默认优先级 指定优先级 注意事项 优先级继承 @ Thread 中线程优先级相关属性 每个线程均有优先级,在 ...

  6. RxJS v6 学习指南

    为什么要使用 RxJS RxJS 是一套处理异步编程的 API,那么我将从异步讲起. 前端编程中的异步有:事件(event).AJAX.动画(animation).定时器(timer). 异步常见的问 ...

  7. 阿里(蚂蚁,菜鸟)+百度+网易面经(JAVA)

    本人综述: 本人本科和硕士均是毕业于普通的双非院校,参加过ACM竞赛,阿里面了三次全被拒了,网易收到offer. 阿里面试: 阿里的面试问的都是很基础的东西,如操作系统的简单问题,计算机网络的基本问题 ...

  8. float和position的使用

    http://blog.csdn.net/yaodebian/article/details/58621183

  9. LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下)

    LINUX内核分析第五周学习总结——扒开应用系统的三层皮(下) 张忻(原创作品转载请注明出处) <Linux内核分析>MOOC课程http://mooc.study.163.com/cou ...

  10. idea 使用 mybaits generator

    Intellij IDEA 14 作为JavaIDE 神器,接触后发现,非常好用,对它爱不释手,打算离开eclipse和myeclipse,投入Intellij IDEA的怀抱. 然而在使用的过程中会 ...