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 考虑二分第 ...
随机推荐
- Nuget包CommonServiceLocator从1.0.3升级到2.0.4时MvvmLight的ViewModelLocator初始化SimpleIoc.Default格式不匹配问题
原文:Nuget包CommonServiceLocator从1.0.3升级到2.0.4时MvvmLight的ViewModelLocator初始化SimpleIoc.Default格式不匹配问题 把旧 ...
- cocos2d-x学习记录6——自定义Button
cocos2d-x中封装CCMenuItem等相关按钮,但是有些时候需要自己封装按钮,这样能够更加灵活的实现对应功能. 自定义Button,需要重写OnEnter()和onExit()函数,并在对应函 ...
- MVC的多页面后台管理系统
MVC的多页面后台管理系统 同样功能的后台管理系统,也是可以使用 ASP.NET MVC .Web API 和JQuery 来制作. 所有的功能都与Angular js的单页面相同.应用层所有的方法都 ...
- 利用BFS实现最短路
首先,我们要知道BFS的思想,BFS全称是Breadth-First-Search. 二叉树的BFS:通过BFS访问,它们的访问顺序是它们到根节点距离从小到大的排序. 图的BFS:同样的,离起点越近, ...
- 华为笔试——C++平安果dp算法
题目:平安果 题目介绍:给出一个m*n的格子,每个格子里有一定数量的平安果,现在要求从左上角顶点(1,1)出发,每次走一格并拿走那一格的所有平安果,且只能向下或向右前进,最终到达右下角顶点(m,n), ...
- 腾讯 深圳 25928-PHP开发工程师(深圳)
工作地点:深圳 职位类别:技术类 招聘人数:1人 工作职责: 负责游戏研运体系流程工具及相关产品的开发.维护: 参与支撑系统的需求分析.设计.编码: 承担外包开发成员技术导师,解决技术难点,把控开发质 ...
- vue.js指令总结
1.v-html 用于输出真正html,而不是纯文本. 2.v-text 输出纯文本. <!DOCTYPE html> <html lang="en"> & ...
- Linux内核分析(第三周)
构造一个简单的linux系统menuOS. 一.简介 1.两把宝剑:中断-上下文的切换(保存现场和恢复现场) 进程-上下文的切换 2.linux-3.18.6 arch/x86目录下的代码是我们重点关 ...
- javascript 数组对象及其方法
数组声明:通过let arr = new Array(); 或者 let arr = []; 数组对象可调用的方法: 1)find方法,使用情况是对数组进行筛选遍历,find方法要求某个函数(A)作为 ...
- Github: 团队账号:https://github.com/ChenRuTing
Github: 团队账号:https://github.com/ChenRuTing 以后我们做好的代码会随时更新上传到这里,请老师届时帮我们看看.谢谢老师.