noip 2008题解

笨小猴

原题

笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。

输入输出样例

输入样例#1:

  1. error

输出样例#1:

  1. Lucky Word
  2. 2

输入样例#2:

  1. olympic

输出样例#2:

  1. No Answer
  2. 0

思路

简单的暴力
简单的判断质数

代码

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<iostream>
  4. #include<cmath>
  5. using namespace std;
  6. char a[150];
  7. int num[50],maxx=-11,minx=147258963;
  8. int check(int x){
  9. int flag=0;
  10. if(x==0||x==1) return 1;
  11. if(x==2) return 0;
  12. for(int i=2;i<=sqrt(x);i++){
  13. if(x%i==0){
  14. flag=1;
  15. break;
  16. }
  17. }
  18. return flag;
  19. }
  20. int main(){
  21. for(int i=1;i<=100;i++){
  22. num[i]=0;
  23. }
  24. scanf("%s",a);
  25. int len=strlen(a);
  26. for(int i=0;i<len;i++){
  27. num[a[i]-'a']++;
  28. }
  29. for(int i=0;i<=50;i++){
  30. maxx=max(maxx,num[i]);
  31. if(num[i]>0) {
  32. minx=min(minx,num[i]);
  33. }
  34. }
  35. if(check(maxx-minx)) printf("No Answer\n0");
  36. else printf("Lucky Word\n%d",maxx-minx);
  37. return 0;
  38. }

火柴棒等式

原题

给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示:


注意:

  1. 加号与等号各自需要两根火柴棍
  2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0)
  3. n根火柴棍必须全部用上

输入输出格式

输入格式:
输入文件matches.in共一行,又一个整数n(n<=24)。
输出格式:
输出文件matches.out共一行,表示能拼成的不同等式的数目。

输入输出样例

样例输入1:

  1. 14

样例输出1:

  1. 2

样例输入2:

  1. 18

样例输出2:

  1. 9

思路

先用数组记下,0~9每一个数所用的火柴棒数,
然后向后所算出每一个所需的数所用的火柴棒数
那么
到底要算到多少呢?
1是需要火柴棒数最少的

假设现在有1111+0=1111;
一共就用了8+2+6+2+8=26 根火柴棒,
显然 对于其他所有的大于1111的情况。
所用的棒数都一定大于20。

所以
算到1111,就足以满足需求了
对于一个数的棒数要多少,具体见代码

代码

  1. #include<queue>
  2. #include<cmath>
  3. #include<cstdio>
  4. #include<cstdlib>
  5. #include<string>
  6. #include<cstring>
  7. #include<iostream>
  8. #include<algorithm>
  9. #define N 2400
  10. #define INF 1000007
  11. using namespace std;
  12. int n,a[N];
  13. int num[]={6,2,5,5,4,5,6,3,7,6};
  14. int main(){
  15. cin >> n;
  16. n-=4;
  17. int ans=0;
  18. for(int i=0;i<10;i++) a[i]=num[i];
  19. for(int i=10;i<N;i++)
  20. {
  21. int tmp=i;
  22. while(tmp)
  23. {
  24. a[i]+=a[tmp%10];
  25. tmp/=10;
  26. }
  27. }
  28. for (int i=0;i<N/2;i++)
  29. for (int j=0;j<N/2;j++)
  30. {
  31. int k=i+j;
  32. if (a[i]+a[j]+a[k]==n) {ans++;}
  33. }
  34. cout<<ans;
  35. return 0;
  36. }

传纸条

原题

小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n)。从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的纸条只可以向上或者向左传递。
在活动进行中,小渊希望给小轩传递一张纸条,同时希望小轩给他回复。班里每个同学都可以帮他们传递,但只会帮他们一次,也就是说如果此人在小渊递给小轩纸条的时候帮忙,那么在小轩递给小渊的时候就不会再帮忙。反之亦然。
还有一件事情需要注意,全班每个同学愿意帮忙的好感度有高有低(注意:小渊和小轩的好心程度没有定义,输入时用0表示),可以用一个0-100的自然数来表示,数越大表示越好心。小渊和小轩希望尽可能找好心程度高的同学来帮忙传纸条,即找到来回两条传递路径,使得这两条路径上同学的好心程度只和最大。现在,请你帮助小渊和小轩找到这样的两条路径。

输入输出格式

输入格式:

输入文件message.in的第一行有2个用空格隔开的整数m和n,表示班里有m行n列(1<=m,n<=50)。
接下来的m行是一个m*n的矩阵,矩阵中第i行j列的整数表示坐在第i行j列的学生的好心程度。每行的n个整数之间用空格隔开。

输出格式:

输出文件message.out共一行,包含一个整数,表示来回两条路上参与传递纸条的学生的好心程度之和的最大值。

输入输出样例

输入样例#1:

  1. 3 3
  2. 0 3 9
  3. 2 8 5
  4. 5 7 0

输出样例#1:

  1. 34

代码

  1. #include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. int dp[55][55][55][55];
  5. int n, m;
  6. int map[55][55];
  7. int main() {
  8. scanf("%d%d", &n, &m);
  9. for(int i = 1; i <= n; i++)
  10. for(int j = 1; j <= m; j++)
  11. scanf("%d", &map[i][j]);
  12. for(int i = 1; i <= n; i++) {
  13. for(int j = 1; j <= m; j++) {
  14. for(int k = 1; k <= n; k++) {
  15. int l;
  16. if(i + j - k > 0)l = i + j - k;
  17. else continue;
  18. dp[i][j][k][l]=max(max(dp[i-1][j][k-1][l],dp[i-1][j][k][l-1]),max(dp[i][j-1][k-1][l],dp[i][j-1][k][l-1]))+map[i][j]+map[k][l];
  19. if(i == k && j == l)dp[i][j][k][l] -= map[i][j];
  20. }
  21. }
  22. }
  23. printf("%d\n",dp[n][m][n][m]);
  24. return 0;
  25. }

noip2008 总结的更多相关文章

  1. NOIP2008 ISBN号码(一桶水)【A005】

    [A005]NOIP2008 ISBN号码(一大桶水)[难度A]———————————————————————————————————————————————————————————————————— ...

  2. NOIP2008提高组(前三题) -SilverN

    此处为前三题,第四题将单独发布 火柴棒等式 题目描述 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A.B.C是用火柴棍拼出的整数(若该数非零,则最高位不能是0).用火柴棍拼数字0 ...

  3. NOIP2008 普及组T4 立体图 解题报告-S.B.S.(施工未完成)

    题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣的内容.最近,他准备给小朋友们讲解立体图,请你帮他画出立体图. 小渊有一块面积为m*n的矩形区域,上面有m*n个边长为1的格子,每 ...

  4. noip2008普及组4题题解-rLq

    (啊啊啊终于补到了今天的作业了) 本题地址:http://www.luogu.org/problem/show?pid=1058 题目描述 小渊是个聪明的孩子,他经常会给周围的小朋友们将写自己认为有趣 ...

  5. NOIP2008普及组 题解 -SilverN

    T1 ISBN号码 题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字.1位识别码和3位分隔符, 其规定格式如“x-xxx-xxxxx-x”,其中符号“-”就是分隔符( ...

  6. NOIP2008普及组题解

    NOIP2008普及组题解 从我在其他站的博客直接搬过来的 posted @ 2016-04-16 01:11 然后我又搬回博客园了233333 posted @ 2016-06-05 19:19 T ...

  7. noip2008 笨小猴

    P1125 笨小猴 1.6K通过 3.7K提交 题目提供者该用户不存在 标签模拟2008NOIp提高组 难度普及- 提交该题 讨论 题解 记录   题目描述 笨小猴的词汇量很小,所以每次做英语选择题的 ...

  8. Noip2008提高组总结

    Noip2008前三题是基础题,仔细一些都是可以AC的,第四题的证明很巧妙,但是看懂后代码其实很简单,感觉在这些大家都不屑去做的简单题中又学到了不少,四道题代码基本都是十几二十行就够了,渐渐感觉到,比 ...

  9. Luogu1155 NOIP2008 双栈排序 【二分图染色】【模拟】

    Luogu1155 NOIP2008 双栈排序 题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过 2个栈 S1 和 S2 ,Tom希望借助以下 44 种操作实现将输入序列升序排序. 操作 ...

  10. NOIP2008普及组第3题 传球游戏

    NOIP2008普及组第3题 传球游戏 时间限制: 1 Sec  内存限制: 128 MB提交: 29  解决: 16[提交][状态][讨论版][命题人:外部导入] 题目描述 上体育课的时候,小蛮的老 ...

随机推荐

  1. RabbitMQ一些实用方法

    https://blog.csdn.net/vbirdbest/article/details/78670550

  2. C#读写内置类型的数据时是否原子操作

    Reads and writes of the following data types are atomic: bool, char, byte, sbyte, short, ushort, uin ...

  3. String相关介绍

    String 字符串是常量,创建后不可改变. 字符串字面值存储在字符串池中,可以共享. String s1 = "Runoob"; // String 直接创建 String s2 ...

  4. HTML中的全局属性

    一.全局属性和局部属性 每种元素都有自己规定的属性,这种属性成为局部属性.还有另外一种属性,他可以用来配置所有元素的共有行为,这种属性成为称为全局属性.全局属性可以用在任何一个元素身上,但是不一定会带 ...

  5. "sar"工具 利用率

    LTP--linux稳定性测试 linux性能测试 ltp压力测试   余二五 2017-11-14 16:20:00 浏览1172 linux 日志 配置 内存管理 测试 脚本 性能测试 压力测试 ...

  6. Linux 发行版本介绍

    引言 Linux 有非常多的版本,比如世面上常见的有 Ubuntu.RedHat.Fedora.Centos 等,这么多的版本我们究竟该选哪一个呢?对于 Linux 初学者有必要对这些 Linux 发 ...

  7. PHP相关session的知识

    由于http协议是一种无状态协议,所以没有办法在多个页面间保持一些信息.例如,用户的登录状态,不可能让用户每浏览一个页面登录一次.session就是为了解决一些需要在多页面间持久保持一种状态的机制.P ...

  8. 【玩转PDF】贼稳,产品要做一个三方合同签署,我方了!

    一.前言 事情是这个样子的,小农的公司,之前有个功能需要签署来进行一系列的操作,于是我们引入了一个三方平台的签署--上上签,但是有一个比较尴尬的点就是,它不支持合同在浏览器上和附件一起预览的,我们想要 ...

  9. Ubuntu下安装与卸载Nginx

    1.Ubuntu下安装Nginx比较简单 敲入下列命令即可: sudo apt-get update sudo apt-get install nginx 2.Ubuntu下卸载,稍不注意就会入坑 s ...

  10. [论文阅读笔记] Structural Deep Network Embedding

    [论文阅读笔记] Structural Deep Network Embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 现有的表示学习方法大多采用浅层模型,这可能不能 ...