预计分数:100+50+50

实际分数:5+50+100

=.=

多重背包

(backpack.cpp/c/pas)

(1s/256M)

题目描述

提供一个背包,它最多能负载重量为W的物品。

现在给出N种物品:对于第i类物品,一共有Ci件物品;对于每一件物品,重量为Wi,价值为Vi。

找出一种装载方式使得背包中的物品总价值最大。

输入格式(backpack.in)

第一行两个整数N,W,代表物品的种类与背包的总负重。

第2~N+1行,每行三个整数Wi, Vi, Ci,代表第i种物品的重量、价值与数量。

输出格式(backpack.out)

仅一行,一个整数V,代表最大的总价值。

样例输入

3 9

5 8 2

3 6 2

2 1 5

样例输出

14

数据范围与限制

1<=N<=20, 0<=W<=1000

1<=Wi<=100, 0<=Vi<=100, 0<=Ci<=100

一看见这道题的时候,我马上想到了动态规划完全背包问题,但无奈因为学习动归年代久远+没怎么学好,只能默默地打暴力;

数据范围也挺小,老师的意思应该就是让我们暴力。。

二十分钟打完暴力,然后我习惯性的做了几组极端数据改了改小错误就过了,

但是。。。。。。。。

因为我写的回溯比较特殊。。。、

所以。。。。。。。。

只能过极端数据。。。。

。。。。。。。

我竟然,,被这种水题淹死了,,,

AC 代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<stack>
  6. #include<queue>
  7. #include<algorithm>
  8. using namespace std;
  9. struct node
  10. {
  11. int w;//重量
  12. int v;//价值
  13. int num;//数量
  14. int gdnum;
  15. }a[];
  16. int n,m;
  17. int ans=;
  18. void dfs(int nownum,int nowv,int noww)// 当前 背包编号 价值 重量
  19. {
  20. if(nowv>ans&&noww<=m) {ans=nowv;}
  21. if(noww>m||nownum>n)return;
  22.  
  23. int p=a[nownum].gdnum;
  24.  
  25. for(int i=;i<=p;i++)
  26. {
  27. if(a[nownum].num>)
  28. {
  29. a[nownum].num=a[nownum].num-i;
  30. dfs(nownum+,nowv+a[nownum].v*i,noww+a[nownum].w*i);
  31. a[nownum].num=a[nownum].num+i;
  32. }
  33. }
  34.  
  35. //dfs(nownum+1,nowv,noww);
  36. }
  37. int main()
  38. {
  39. //freopen("backpack.in","r",stdin);
  40. //freopen("backpack.out","w",stdout);
  41.  
  42. scanf("%d%d",&n,&m);
  43.  
  44. for(int i=;i<=n;i++)
  45. {
  46. scanf("%d%d%d",&a[i].w,&a[i].v,&a[i].num);
  47. a[i].gdnum=a[i].num;
  48. }
  49.  
  50. dfs(,,);
  51.  
  52. printf("%d",ans);
  53.  
  54. fclose(stdin);
  55. fclose(stdout);
  56. return ;
  57. }

循环序列

(circulate.cpp/c/pas)

(1s/256M)

题目描述

Alice与Bob在玩游戏:

Alice首先给出两个数X与Y(X<=Y);

Bob则按顺序将X,X+1,X+2,…,Y-1,Y写成一个大数S。

Alice最后将S首尾相连,让其围成一个圈。

这时,Bob想知道,从S的开头出发,往后的第L到第R数字之和是多少。

输入格式(circulate.in)

第一行四个整数X,Y,L,R,代表Alice的两个数字和Bob想要知道的第L位到第R位的数字之和。

输出格式(circulate.out)

仅一行,一个整数M,代表第L位到第R位的数字之和。

样例输入

10 11 4 12

样例输出

7

样例解释

Bob将数字写成一行大数S = 1011;围成一个圈后,从第4位到第12位分别是1,1,0,1,1,1,0,1,1,它们的和是7.

数据范围与限制

对于50%的数据,L=1, X,Y,L,R<=1000;

对于100%的数据,S的长度不大于10000,X,Y,L,R<=100000000.

一开始读题有些懵逼,但想了一会儿才发现也不是很难,也就是数据处理比较繁琐。

于是二话不说就开始模拟。。。

但是敲完之后一看数据范围才发现撑死也就过百分之五十的数据

想了一会儿又没有想出什么好算法来。。。。

so硬着头皮交了份模拟暴力代码

果不其然->50分

正解:

因为从l-r很可能出现循环计算的情况,所以我们直接求出l和r对于生成字符串的倍数再加上余数即可

因为在循环计算生成字符串的每一位数字的时候非常繁琐,所以我们可以做一个前缀和,这样可以大大降低时间复杂度

超时代码:

TLE

AC代码:

  1. #include<iostream>
  2. #include<cstdio>
  3. using namespace std;
  4. int x,y,l,r;
  5. int a[];
  6. int numa=;
  7. int b[];
  8. int numb=;
  9. int qiu(int o)
  10. {
  11. return o/numa*a[numa]+a[o%numa];
  12. }
  13. int main()
  14. {
  15. scanf("%d%d%d%d",&x,&y,&l,&r);
  16. for(int i=x;i<=y;i++)
  17. {
  18. int p=i;
  19. numb=;
  20. while(p!=)
  21. {
  22. b[numb++]=p%;
  23. p=p/;
  24. }
  25. for(int i=numb-;i>=;i--)
  26. {
  27. a[numa++]=b[i];
  28. }
  29. }
  30. numa--;
  31. for(int i=;i<=numa;i++)
  32. {
  33. a[i]=a[i-]+a[i];
  34. }
  35. cout<<qiu(r)-qiu(l-);// -1是为了方式l号元素数两遍
  36. return ;
  37. }

AC

合并游戏

merge.cpp/c/pas

(1s/256M)

题目描述

Cindy和Dan在玩一个游戏。

一开始Cindy想出了N个数,接着她把这N个数全部给了Dan。

Dan得到这组数后,它会挑出3个数(如果不足3个则全部挑出)。Dan会把这几个数加起来变成一个数,然后再把这个数与剩下的数再放到一起。Dan会一直这样做,直到最后只剩下一个数。

Cindy则会在旁边记下每次Dan得到的数,她把这些数加起来,作为本次游戏的得分。她想知道,对于一组数,Dan能得到的最大的得分是多少?

输入格式

第一行一个正整数N,代表这组数的个数;

第二行N个正整数,代表这N个整数。

输出格式

一行一个整数,代表可能的最大得分。

样例输入(merge.in)

4

3 1 5 6

样例输出(merge.out)

29

样例解释

Dan可以首先把(3,5,6)这三个数先合并起来,得到3 + 5 + 6 = 14; 接着他把剩下的两个数再合起来,得到1 + 14 = 15.这样,总得分是最大的 14 + 15 = 29.

数据范围与限制

对于50%的数据,N<=10

对于100%的数据,N<=1000,所有数不大于1000

当我读完题目的时候,我就想到了动态规划,想到了堆,想到了贪心,想到了优先队列。。。。

但是哪一个都不会,,,,。。,,。,。,。,。。

so还是跟着感觉模拟

没想到最后居然AC了=。=

好狗血。。。。。。

AC代码

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<stack>
  6. #include<queue>
  7. #include<algorithm>
  8. using namespace std;
  9. int n;
  10. int a[];
  11. int ans=;
  12. int flag=;
  13. int now=;
  14. int comp(const int &a ,const int & b)
  15. {
  16. return a>b;
  17. }
  18. void gett()
  19. {
  20. now=;
  21. if(a[]!=-&&a[]==-)
  22. {
  23. //ans=ans+a[1];
  24. flag=;
  25. return ;
  26. }
  27. for(int i=;i<=;i++)
  28. {
  29. if(a[i]==-)continue;
  30. now=now+a[i];
  31. a[i]=-;
  32. }
  33. ans=ans+now;
  34. a[]=now;
  35. sort(a+,a+n+,comp);
  36. }
  37. int main()
  38. {
  39. freopen("merge.in","r",stdin);
  40. freopen("merge.out","w",stdout);
  41. scanf("%d",&n);
  42.  
  43. for(int i=;i<=n;i++)
  44. scanf("%d",&a[i]);
  45.  
  46. sort(a+,a+n+,comp);
  47.  
  48. while(flag==)
  49. {
  50. gett();
  51. }
  52.  
  53. printf("%d",ans);
  54. fclose(stdin);
  55. fclose(stdout);
  56. return ;
  57. }

AC

总结:

这次考试,不能说考的很好,因为我们学校有两位大神拿了满分,这个差距绝对不是一丁半点的,从思路到代码,从样例到极端数据,他们的能力远远在我之上

但又不能说考的很坏,起码没有犯跟前三次考试一样的超低级错误(其实第一个题也犯了次低级错误=.=),也算是一个转折点

第一题爆零(确实不值)

第二题超时(思维太窄)

第三题AC(有点运气)

至少没有出现那种一点思路都没有纯懵逼的题目,说明自己还有提升的空间

加油!

2017 五一 清北学堂 Day1模拟考试结题报告的更多相关文章

  1. 清明培训 清北学堂 DAY1

    今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1)   高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...

  2. 五一培训 清北学堂 DAY1

    今天是冯哲老师的讲授~ 1.枚举 枚举也称作穷举,指的是从问题所有可能的解的集合中一一枚举各元素. 用题目中给定的检验条件判定哪些是无用的,哪些是有用的.能使命题成立的即为其解. 例一一棵苹果树上有n ...

  3. 2017国庆 清北学堂 北京综合强化班 Day1

    期望得分:60+ +0=60+ 实际得分:30+56+0=86 时间规划极端不合理,T2忘了叉积计算,用解析几何算,还有的情况很难处理,浪费太多时间,最后gg 导致T3只剩50分钟,20分钟写完代码, ...

  4. 清北学堂 NOIP2017模拟赛 越赛越心塞

    连续考了一个星期发现自己真的是手感型选手,成绩全靠天意.手感好了码出200+也没什么问题,推出式子并且打出自己都不信的操作也有过.手感差了......就一个呵呵二字. 然后开始是T总让我们休息了一个星 ...

  5. 4.4清北学堂Day1 主要内容:数论,数学

    Day 1; 1.常见的高精 输入输出都用字符数组: 字符数组的实际长度用strlen()来求: 运算时倒序运算,把每一个字符都-‘0’ 进位的处理上也要注意: 小数减大数时先判断大小然后加负号 只能 ...

  6. 五一清北学堂培训之数据结构(Day 1&Day 2)

    Day 1 前置知识: 二进制 2.基本语法 3.时间复杂度 正片       1.枚举 洛谷P1046陶陶摘苹果  入门题没什么好说的 判断素数:从2枚举到sqrt(n),若出现n的因子,则n是合数 ...

  7. 五一清北学堂培训之Day 3之DP

    今天又是长者给我们讲小学题目的一天 长者的讲台上又是布满了冰红茶的一天 ---------------------------------------------------------------- ...

  8. 济南清北学堂游记 Day 1.

    快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...

  9. 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)

    清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...

随机推荐

  1. Code-NFine:NFine权限控制

    ylbtech-Code-NFine:NFine权限控制 1.返回顶部 1. NFine框架研究 1.前台业务操作 1.1 系统菜单配置方法 1.2 菜单管理配置方法 1.2.1 按钮管理 1.2.2 ...

  2. 子组件索引$refs

    $refs只在组件渲染完成之后才填充,并且它是非响应式的,它仅仅作为一个直接访问访问子组件的应急方案-----应当避免的模板中或者计算属性中使用$refs

  3. 【原】Cache Buffer Chain 第四篇

    作者:david_zhang@sh [转载时请以超链接形式标明文章] 链接:http://www.cnblogs.com/david-zhang-index/p/3873357.html [测试1]低 ...

  4. Android开发--Activity

    一:Activity生命周期 (1)Activity生命周期中的几种方法: protected void onCreate(Bundle savedInstanceState): protected  ...

  5. error:对‘vtable for new_sequence’未定义的引用 对‘typeinfo for num_sequence’未定义的引用

    在设计父类子类继承关系中,经常会出现此类问题. 报错原因:父类中的虚函数只有声明,没有定义. 解决方案 : 1. 定义相关的虚函数的实现. 2. 不实现了,直接搞成纯虚函数留给后代实现. virtua ...

  6. app自动化测试工具robotium

    robotium基于instramentation框架,可对app白盒黑盒测试,缺点是测试进程和被测进程需要在一个进程中,不能跨应用 白盒测试时,需要app源代码,在eclipse里新建android ...

  7. 【网络爬虫】【java】微博爬虫(四):数据处理——jsoup工具解析html、dom4j读写xml

    之前提到过,对于简单的网页结构解析,可以直接通过观察法.手工写正则解析,可以做出来,比如网易微博.但是对于结构稍微复杂点的,比如新浪微博,如果还用正则,用眼睛一个个去找,未免太麻烦了. 本文介绍两个工 ...

  8. E20181120-hm

    checkerboard n. 西洋跳棋盘; checker n. 方格图案;

  9. L2-024 部落 (25 分)并查集

    在一个社区里,每个人都有自己的小圈子,还可能同时属于很多不同的朋友圈.我们认为朋友的朋友都算在一个部落里,于是要请你统计一下,在一个给定社区中,到底有多少个互不相交的部落?并且检查任意两个人是否属于同 ...

  10. CodeForces 653A【水】

    sort一发,去重 #include<cstdio> #include<iostream> #include<queue> #include<string.h ...