2017 五一 清北学堂 Day1模拟考试结题报告
预计分数: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 代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<algorithm>
using namespace std;
struct node
{
int w;//重量
int v;//价值
int num;//数量
int gdnum;
}a[];
int n,m;
int ans=;
void dfs(int nownum,int nowv,int noww)// 当前 背包编号 价值 重量
{
if(nowv>ans&&noww<=m) {ans=nowv;}
if(noww>m||nownum>n)return; int p=a[nownum].gdnum; for(int i=;i<=p;i++)
{
if(a[nownum].num>)
{
a[nownum].num=a[nownum].num-i;
dfs(nownum+,nowv+a[nownum].v*i,noww+a[nownum].w*i);
a[nownum].num=a[nownum].num+i;
}
} //dfs(nownum+1,nowv,noww);
}
int main()
{
//freopen("backpack.in","r",stdin);
//freopen("backpack.out","w",stdout); scanf("%d%d",&n,&m); for(int i=;i<=n;i++)
{
scanf("%d%d%d",&a[i].w,&a[i].v,&a[i].num);
a[i].gdnum=a[i].num;
} dfs(,,); printf("%d",ans); fclose(stdin);
fclose(stdout);
return ;
}
循环序列
(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对于生成字符串的倍数再加上余数即可
因为在循环计算生成字符串的每一位数字的时候非常繁琐,所以我们可以做一个前缀和,这样可以大大降低时间复杂度
超时代码:
AC代码:
#include<iostream>
#include<cstdio>
using namespace std;
int x,y,l,r;
int a[];
int numa=;
int b[];
int numb=;
int qiu(int o)
{
return o/numa*a[numa]+a[o%numa];
}
int main()
{
scanf("%d%d%d%d",&x,&y,&l,&r);
for(int i=x;i<=y;i++)
{
int p=i;
numb=;
while(p!=)
{
b[numb++]=p%;
p=p/;
}
for(int i=numb-;i>=;i--)
{
a[numa++]=b[i];
}
}
numa--;
for(int i=;i<=numa;i++)
{
a[i]=a[i-]+a[i];
}
cout<<qiu(r)-qiu(l-);// -1是为了方式l号元素数两遍
return ;
}
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代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<stack>
#include<queue>
#include<algorithm>
using namespace std;
int n;
int a[];
int ans=;
int flag=;
int now=;
int comp(const int &a ,const int & b)
{
return a>b;
}
void gett()
{
now=;
if(a[]!=-&&a[]==-)
{
//ans=ans+a[1];
flag=;
return ;
}
for(int i=;i<=;i++)
{
if(a[i]==-)continue;
now=now+a[i];
a[i]=-;
}
ans=ans+now;
a[]=now;
sort(a+,a+n+,comp);
}
int main()
{
freopen("merge.in","r",stdin);
freopen("merge.out","w",stdout);
scanf("%d",&n); for(int i=;i<=n;i++)
scanf("%d",&a[i]); sort(a+,a+n+,comp); while(flag==)
{
gett();
} printf("%d",ans);
fclose(stdin);
fclose(stdout);
return ;
}
AC
总结:
这次考试,不能说考的很好,因为我们学校有两位大神拿了满分,这个差距绝对不是一丁半点的,从思路到代码,从样例到极端数据,他们的能力远远在我之上
但又不能说考的很坏,起码没有犯跟前三次考试一样的超低级错误(其实第一个题也犯了次低级错误=.=),也算是一个转折点
第一题爆零(确实不值)
第二题超时(思维太窄)
第三题AC(有点运气)
至少没有出现那种一点思路都没有纯懵逼的题目,说明自己还有提升的空间
加油!
2017 五一 清北学堂 Day1模拟考试结题报告的更多相关文章
- 清明培训 清北学堂 DAY1
今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1) 高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...
- 五一培训 清北学堂 DAY1
今天是冯哲老师的讲授~ 1.枚举 枚举也称作穷举,指的是从问题所有可能的解的集合中一一枚举各元素. 用题目中给定的检验条件判定哪些是无用的,哪些是有用的.能使命题成立的即为其解. 例一一棵苹果树上有n ...
- 2017国庆 清北学堂 北京综合强化班 Day1
期望得分:60+ +0=60+ 实际得分:30+56+0=86 时间规划极端不合理,T2忘了叉积计算,用解析几何算,还有的情况很难处理,浪费太多时间,最后gg 导致T3只剩50分钟,20分钟写完代码, ...
- 清北学堂 NOIP2017模拟赛 越赛越心塞
连续考了一个星期发现自己真的是手感型选手,成绩全靠天意.手感好了码出200+也没什么问题,推出式子并且打出自己都不信的操作也有过.手感差了......就一个呵呵二字. 然后开始是T总让我们休息了一个星 ...
- 4.4清北学堂Day1 主要内容:数论,数学
Day 1; 1.常见的高精 输入输出都用字符数组: 字符数组的实际长度用strlen()来求: 运算时倒序运算,把每一个字符都-‘0’ 进位的处理上也要注意: 小数减大数时先判断大小然后加负号 只能 ...
- 五一清北学堂培训之数据结构(Day 1&Day 2)
Day 1 前置知识: 二进制 2.基本语法 3.时间复杂度 正片 1.枚举 洛谷P1046陶陶摘苹果 入门题没什么好说的 判断素数:从2枚举到sqrt(n),若出现n的因子,则n是合数 ...
- 五一清北学堂培训之Day 3之DP
今天又是长者给我们讲小学题目的一天 长者的讲台上又是布满了冰红茶的一天 ---------------------------------------------------------------- ...
- 济南清北学堂游记 Day 1.
快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...
- 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)
清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...
随机推荐
- CQOI2017 部分题解
部分题解是指没写那道算几. BZOJ上目前没有day2的题面D2T2的图. BZOJ4813 小Q的棋盘 显然可以$O(n^2)$DP,然而可以$O(n)$贪心:只有一条从根出发的一条链上的边可以只经 ...
- Mutual information and Normalized Mutual information 互信息和标准化互信息
实验室最近用到nmi( Normalized Mutual information )评价聚类效果,在网上找了一下这个算法的实现,发现满意的不多. 浙江大学蔡登教授有一个,http://www.zju ...
- bzoj4247挂饰——DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4247 就是01背包: 把挂钩数限制在n以内,因为不需要更多,而这会带来一些问题,就是有很多挂 ...
- ubuntu 下串口调试工具 minicom安装与配置
检查系统是否支持USB转串口: lsmod | grep usbserial 如果有usbserial,说明系统支持USB转串口. 识别串口设备: 插上USB转串口,在终端输入命令: #dmesg | ...
- java一些jar包的bug(不定期更新)
c3p0-0.9.5.jar 连接池jar包,常用于web项目,关闭连接池时,没有注销所有的driver 解决:可声明一个ServletContextListener的子类并设置监听,重写contex ...
- supervisor 启动 celery 及启动中的问题
一.前言 本教程重点在于supervisor的配置过程,celery的安装配置请参考其他教程 二.安装supervisor 1.安装命令 pip install supervisor # superv ...
- Mac下intellij IDEA新建javaweb项目
intellij IDEA可以说是非常好用的工具,本人用来开发java.比eclipse等好用太多了.谁用谁知道,当然只是开发工具而已,用什么都无所谓.大牛们都用记事本编程呢. 本文帮助新手创建一个j ...
- Phpstorm建立连接Wampserver的数据库
phpstorm是一款php集成开发环境软件,集成了很多功能,不但有强大的代码编辑及调试功能,还能连接数据库.本文写的就是如何用phpstorm来建立访问wampserver数据库,查询输出数据,方便 ...
- Mybatis思
站在巨人的肩膀上,感谢! mybatis源码分析之Mapper代理实现分析 2017年11月21日 23:39:04 huangshanchun 阅读数:277 版权声明:欢迎转载,如有不足之处 ...
- html中id name class的区别(转)
HTML 中 id与name 区别 一个name可以同时对应多个控件,比如checkbox和radio 而id必须是全文档中唯一的 id的用途 1) id是HTML元素的Identity,主要是在客户 ...