并没有第四题。(还不会矩阵乘法加速线性数列)

题目1 : 数位翻转

时间限制:20000ms
单点时限:1000ms
内存限制:256MB

描述

给定一个数 n,你可以进行若干次操作,每次操作可以翻转 n 的二进制表示下的某一位,即将 0 变成 1,1 变成 0

现在小 Hi 想知道,至少需要多少次操作,才能将 n 变成 n-1

输入

一个正整数 n

1 ≤ n ≤ 109

输出

输出最少的操作次数

签到题,模拟一下取出各位二进制数即可,极水,怒A。

 #include<cstdio>
#include<algorithm> using namespace std; int n,m,lena,lenb,ans;
int a[],b[]; int main()
{
scanf("%d",&n);
m=n-;
while(n)
{
a[++lena]=n%;
n/=;
}
while(m)
{
b[++lenb]=m%;
m/=;
}
int len=max(lena,lenb);
for(int i=;i<=len;i++)
if(a[i]!=b[i]) ans++;
printf("%d",ans);
return ;
}

题目2 : 最短公共子序列

时间限制:20000ms
单点时限:1000ms
内存限制:256MB

描述

给定一个 01 串 A,你需要找一个和它等长的01串 B,使得 A 和 B 的最长公共子序列最短

为了方便,你不需要输出 B,你只需要输出 A 和 B 的最长公共子序列的长度

输入

第一行一个 01 串 A

1 ≤ |A| ≤ 105

输出

输出最短的长度

样例输入
000111
样例输出
3

这个题啊,看起来有点唬人。一看到“最长公共子序列最短”,我上来就是一顿二分敲。后来发现check函数没法写,在固有的(我的)惯性思维中,把带字符串背景的都考虑成公共子串(中间不能有不同),而本题恰好反其道而行之,问子序列(子序列中间可间隔不同的)。

我们再冷静分析一下,状态要么是0,要么是1,手动模拟几组答案,可以发现答案正是A串中出现最少元素的个数。

抱着试试看的心态交了上去,竟然A了。qwq。

 #include<cstdio>
#include<algorithm>
#include<cstring> using namespace std; char py[];
int c,d,ans;
int a[],b[]; int main()
{
scanf("%s",py+);
int len=strlen(py+);
for(int i=;i<=len;i++) a[i]=(int)py[i]-'';
for(int i=;i<=len;i++)
if(a[i]==) c++;else d++;
ans=min(c,d);
printf("%d",ans);
return ;
}

题目3 : 拼三角形

时间限制:20000ms
单点时限:1000ms
内存限制:256MB

描述

给定 n 根木棍,第 i 根长度为 ai

现在你想用他们拼成尽量多的面积大于 0 的三角形,要求每根木棍只能被用一次,且不能折断

请你求出最多能拼出几个

输入

第一行一个正整数 n

第二行 n 个正整数 a1 … an

1 ≤ n ≤ 15

1 ≤ ai ≤ 109

输出

输出最多能拼出几个三角形

学长表示:一道暴搜题!巧了!我就不会写暴搜!qwq!

再和学长学习一下qwq。

由于最多有15根棒,所以顶多也就5个三角形。

然后我们就搜就行了qwq。我的模拟&贪心只能拿75分。

注释写在码里qwq。

#include<cstdio>
#include<algorithm> using namespace std;
typedef long long ll; int n;
ll ans;
int a[];
bool flag[]; void dfs(int cnt,int a1,int a2,int pre)
{//cnt->当前已经选到第几个三角形
//a1->三角形中最短边,a2->三角形中最长边。
//pre->上一个选到哪了(下标)
if(cnt==ans+)
{
printf("%d",ans);
exit();//void函数中想直接return 0结束程序用exit
}
if(!a1)
{
for(int i=pre+;i<=n;i++)
{
if(flag[i]) continue;
flag[i]=;
dfs(cnt,a[i],,i);
flag[i]=;
}
}
else if(a1>&&a2<=)
{
for(int i=pre+;i<=n;i++)
{
if(flag[i]) continue;
flag[i]=;
dfs(cnt,a1,a[i],i);
flag[i]=;
}
}
else
{
for(int i=pre+;i<=n;i++)
{
if(flag[i]) continue;
if(a1+a2<=a[i]) return ;
flag[i]=;
dfs(cnt+,,,);
flag[i]=;
}
}
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
sort(a+,a++n);
for(int i=n/;i>=;i--)
{
ans=i;//要几个 当前在哪 现在已经有几个边
dfs(,,,);
}
printf("%d",ans);
return ;
}

Hihocoder [Offer收割]编程练习赛70 解题报告 By cellur925的更多相关文章

  1. [Offer收割]编程练习赛13 解题报告

    http://hihocoder.com/contest/offers13/problems 题目1 : 风格不统一如何写程序 首先:输入保证组成变量名的单词只包含小写字母. 做法:只要对不同的部分进 ...

  2. hihocoder [Offer收割]编程练习赛4

    描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的人,他希望 ...

  3. hihocoder [Offer收割]编程练习赛61

    [Offer收割]编程练习赛61 A:最小排列 给定一个长度为m的序列b[1..m],再给定一个n,求一个字典序最小的1~n的排列A,使得b是A的子序列. 贪心即可,b是A的子序列,把不在b中的元素, ...

  4. ACM学习历程—Hihocoder [Offer收割]编程练习赛1

    比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...

  5. hihocoder [Offer收割]编程练习赛14 小Hi和小Ho的礼物

    题目1 : 小Hi和小Ho的礼物 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 某人有N袋金币,其中第i袋内金币的数量是Ai.现在他决定选出2袋金币送给小Hi,再选2袋 ...

  6. hihoCoder[Offer收割]编程练习赛1题目解析

    题目1 : 九宫 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描写叙述 小Hi近期在教邻居家的小朋友小学奥数.而近期正好讲述到了三阶幻方这个部分,三阶幻方指的是将1~9不反 ...

  7. hihocoder offer收割编程练习赛8 C 数组分拆

    思路:(引自bfsoyc的回答:http://hihocoder.com/discuss/question/4160) 动态规划.状态dp[i]表示 前i个数的合法的方案数,转移是 dp[i] = s ...

  8. hihocoder [Offer收割]编程练习赛18 C 最美和弦(dp)

    题目链接:http://hihocoder.com/problemset/problem/1532 题解:一道基础的dp,设dp[i][j][k][l]表示处理到第几个数,当前是哪个和弦错了几次初始x ...

  9. hihoCoder [Offer收割]编程练习赛3 D子矩阵求和

    子矩阵求和 http://hihocoder.com/discuss/question/3005 声明一下: n是和x一起的,m是和y一起的 x是横着的,y是纵着的,x往右为正,y往下为正 (非常反常 ...

随机推荐

  1. 【Nginx】惊群问题

    转自:江南烟雨 惊群问题的产生 在建立连接的时候,Nginx处于充分发挥多核CPU架构性能的考虑,使用了多个worker子进程监听相同端口的设计,这样多个子进程在accept建立新连接时会有争抢,这会 ...

  2. Mockito的简单使用方法演示样例

    Mockito是一个流行的Mocking框架.它使用起来简单,学习成本非常低.并且具有非常简洁的API,測试代码的可读性非常高.因此它十分受欢迎,用 户群越来越多.非常多的开源的软件也选择了Mocki ...

  3. Win8系统如何在桌面行显示我的电脑

    1 桌面右击-个性化   2 更改桌面图标-然后可以在桌面上显示需要的东西

  4. COCOS2DX学习之Box2d物理引擎使用之------动态物体的创建

    1.创建一个物理世界 首先要引入一个头文件#include "Box2D\Box2D.h" 之后利用b2word创建一个对象,而且指定这个物理世界中的加速度方向. word = n ...

  5. (void __user *)arg 中__user的作用

    __user宏简单告诉编译器(通过 noderef)不应该解除这个指针的引用(因为在当前地址空间中它是没有意义的). (void __user *)arg 指的是arg值是一个用户空间的地址,不能直接 ...

  6. HDU4763 Theme Section 【KMP】

    Theme Section Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) To ...

  7. Android进阶图片处理之三级缓存方案

    图片的三级缓存 一.概述 一開始在学习Android的时候.处理图片的时候,每次获取图片都是直接从网络上面载入图片. 可是在开发项目的过程中,每次点击进入app里面,图片都要慢慢的再一次从网络上面载入 ...

  8. Linux学习笔记:系统启动引导过程

    Linux系统启动引导过程 近期发现自己在仅仅是掌握上有几个比較硬的伤: 一.知识体系碎片,比方Linux,这学点那学点,结果没有成体系,串不起来: 二.记忆时间短暂,非常多的内容学了就忘,最后的结果 ...

  9. 2016/4/1 jquery 与javascript关系 ①取元素 ②操作内容 ③操作属性 ④操作 样式 ⑤ 事件 点击变色

    jQuery的min版本和原版功能是一样的,min版主要应用于已经开发成的网页中,而非min版 的文件比较大,里面有整洁的代码书写规范和注释,主要应用于脚本开发过程当中. JQuery是继protot ...

  10. UVA10462Is There A Second Way Left? —— 次小生成树 kruskal算法

    题目链接:https://vjudge.net/problem/UVA-10462 Nasa, being the most talented programmer of his time, can’ ...