CQUPT萌新赛题解(附F代码)

题解或许会迟到,但永远不会缺席(逃

还是感谢qs手下留情和mzjj给弱智一点面子,才让本蒟蒻拿到了键盘(

题目贴了网址也没意义,鶸校只让内网进(兰儿鶸校oj也见不得人

那么开始正题:

T1,T2:

ORZ直接略过吧.......

T3:

给了个公式,直接用double算会爆精度WA掉(据说记忆化搜索没事?)

然后可以直接把1-70的答案打印出来找规律,发现这TM不是斐波拉契数列吗...

所以直接整数递推之后再printf(".0000")就行了ORZ......

话说这公式就是斐波拉契数列的公式(当然本蒟蒻是不知道的啦)

T4:
c语言课才学了strcmp用法,也算是复习了一下吧(真TM好用,不然就得搞半天一点都不熟练的map了)

直接暴力枚举每个字符串跟字典里面的其中一个对的上不,对不上直接输出,对的上就输出翻译后的。

嵌套问题一开始写了个Floyd,不出所料的T了,略加思索就发现用一个fa数组就可以解决了,对于 i 的翻译结果为 j 的原单词的直接fa[ i ] = j,输出答案的时候直接while(fa[i])到顶就行了,还可以类似并查集思想压缩一下路径(不压缩也能A

T5

裸的线段树加了区间查询的时候允许修改左右最多2位....

标程并看不太懂ORZ,还是写自己的做法吧.....

如果每次查询都拆开成25次询问,时间复杂度为O(25*m*logn),铁定T,所以不能这样。

我们发现其实这25次里面中间的查询都重复了。

所以我们直接用线段树查[L+2 , R-2]这个区间(如果L+2 >= R-2答案肯定为零,不用查了)

记录其最大值M和次大值m,然后我们枚举区间向外延伸的25种情况,每种情况更新的M-m取最小值就是答案了。

时间复杂度为O(m*(logn+25)) ,还行。

T6:

本蒟蒻复习了半天普通dp结果考个状压(兰儿已经很裸了本鶸还是不会

最后45min双手离开键盘进入观海模式OMZ

状态和解法在代码里面都有:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 using namespace std;
 5 const int maxn=1005;
 6 const int maxs=3005;
 7 struct data
 8 {
 9     int h,s,a,b,t;
10 }w[15];
11 int dp[maxn][maxs][15];
12 int n,p;
13 int main()
14 {
15
16     scanf("%d%d",&p,&n);
17
18     for(int i=1;i<=n;i++)
19     {
20         scanf("%d%d%d%d%d",&w[i].h,&w[i].s,&w[i].t,&w[i].a,&w[i].b);
21         w[i].s=w[i].h-w[i].s;
22         w[i].t=w[i].s-w[i].t;
23         w[i].a=w[i].a+w[i].b;
24     }
25
26     //dp[i][S][j] 精力剩余i,唱歌情况为S,前一首是j的最大满意度
27
28     //边界:每首歌当第一首歌的情况,其他状态全部-inf
29
30     int ans=0,all=(1<<n+1)-1;
31     memset(dp,-100,sizeof(dp));
32
33     for(int i=1;i<=n;i++)
34     for(int j=w[i].a;j<=p;j++)
35     {
36         dp[j][1<<i][i]=w[i].h;
37         ans=max(ans,w[i].h);
38     }
39
40     for(int i=1;i<=p;i++)
41     for(int S=0;S<=all;S++)
42     for(int j=1;j<=n;j++) if((1<<j)&S)
43     for(int k=1;k<=n;k++) if(i>=w[k].b&&(1<<k)&S)
44     {
45
46         //当前状态由两种方式转移而来:S中原来有k, S中原来没有k
47
48         if(j==k) dp[i][S][k]=max(dp[i][S][k],dp[i-w[k].b][S][j]+w[k].t);
49         else
50         dp[i][S][k]=max(dp[i][S][k],dp[i-w[k].b][S][j]+w[k].s);
51
52         if(i>=w[k].a)
53         dp[i][S][k]=max(dp[i][S][k],dp[i-w[k].a][S-(1<<k)][j]+w[k].h);
54
55         if(dp[i][S][k]>ans)
56         ans=dp[i][S][k];
57     }
58
59     printf("%d",ans);
60     return 0;
61 }

还是太菜了,同志仍需努力啊ORZ.......

原文地址:https://www.cnblogs.com/staray/p/8179871.html

时间: 2024-10-30 08:47:00

CQUPT萌新赛题解(附F代码)的相关文章

ACM团队招新赛题解

标程代码全部为C语言编写.代码中的#if LOCAL_ 至#endif为本地一些调试内容,可以忽略. Xenny的A+B(1)[容易][签到] 签到题,做不出的话可能你有点不太适合ACM了. Xenny的A+B(2)[容易][签到] 也没什么好说的,用一个循环控制输入的次数就行了 Xenny的A+B(3)[困难][模拟] 这是本次比赛最难的题目,用意在于赛后你们看见此题题解可以开拓一下思维方式,不要局限于中学的思维,要掌握计算机. 乍一看这题没法做,怎么去存A和B两个这么大的数字,但我们可以用数

2016 年宁波工程学院第七届ACM校赛题解报告

2016 年宁波工程学院第七届ACM校赛题解报告 本题解代码直接为比赛代码,仅供参考. A,B,C,D,G,H,J,K,L,M 来自 Ticsmtc 同学. F 来自 Gealo 同学. E,I 来自Alex 学长. Promblem A :    Two Sum 时间限制: 1 Sec  内存限制: 64 MB 题目描述: 给出n个数,另外给出?个整数S,判断是否可以从中取出2个数,使得这两个数的和是S. 输入: 第?行有个整数T(1 <= T <= 10),代表数据组数. 对于每组数据,第

20180909徐州网络赛题解

目录 20180909徐州网络赛题解 A. Hard to prepare MEANING SOLUTION CODE B. BE, GE or NE MEANING SOLUTION CODE F. Features Track CODE G. Trace MENING SOLUTION CODE H. Ryuji doesn't want to study MEANING CODE I. Characters with Hash CODE J. Maze Designer MEANING S

10-4国庆节第七场模拟赛题解

10-4 国庆节第七场模拟赛题解 T1工厂 (factory) 水 #include<iostream> #include<cstdio> #define int long long using namespace std; inline int read(){ int sum=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-')f=-1; ch=getchar(); } while(ch>='0

萌新笔记——C++里创建 Trie字典树(中文词典)(二)(插入、查找、导入、导出)

萌新做词典第二篇,做得不好,还请指正,谢谢大佬! 做好了插入与遍历功能之后,我发现最基本的查找功能没有实现,同时还希望能够把内存的数据存入文件保存下来,并可以从文件中导入词典.此外,数据的路径是存在配置文件中的.甚至,还想尝试类似自动补全的功能.当然了,是做一个比较low的补全,比如传入"编程",能够得到"软件"."学习"."学习网站"."入门"四个字符串.但是传入"编"不会得到&quo

一个萌新的自白

浑浑噩噩的毕业已经过了半年,在这半年时光自己很没有方向感,都在尝试改变自己,但时光已不再,心却未能平静.一次偶然的机会想进IT行业来尝试自己是否能在这里让自己的心海不在一片涟漪.毕竟朦胧的青葱岁月早已逝去,是时候在这个青春真当时,让自己留下值得的回忆. IT行业是一个靠自己实力才能立足的行业,对于我来说是一个比较大的挑战,我是真正完全的电脑萌新,当时抱着很复杂的心态来学习,一边想着自己应该迈开这一步,或许会收到自己想要的那一份充实,另一方面有考虑自己是否能够适应,即使在学习第一节课时,我都在问自

如何实现在Windows上运行Linux程序,附示例代码

如何实现在Windows上运行Linux程序,附示例代码 微软在去年发布了Bash On Windows, 这项技术允许在Windows上运行Linux程序, 我相信已经有很多文章解释过Bash On Windows的原理,而今天的这篇文章将会讲解如何自己实现一个简单的原生Linux程序运行器, 这个运行器在用户层实现, 原理和Bash On Windows不完全一样,比较接近Linux上的Wine. 示例程序完整的代码在github上, 地址是 https://github.com/30324

萌新笔记——C++里创建 Trie字典树(中文词典)(插入、查找、遍历、导入、导出)(上)

写了一个词典,用到了Trie字典树. 写这个词典的目的,一个是为了压缩一些数据,另一个是为了尝试搜索提示,就像在谷歌搜索的时候,打出某个关键字,会提示一串可能要搜索的东西. 首先放上最终的结果: input: 1 编程入门 2 编程软件 3 编程学习 4 编程学习网站 output: 1 char : 件 2 word : 编程软件 3 char : 习 4 word : 编程学习 5 char : 网 6 word : 编程学习网 7 char : 门 8 word : 编程入门 其实这里不应

周一训练赛题解

这次完全是水题大集合啊,希望大家A的开心: 前两个题是我找的,后两个是陶叔找的,另外因为我的偷懒,下面所有的代码都是陶叔亲自写的,十分感谢陶叔: 陶叔暑假为了大家的集训,牺牲了很多自己宝贵的时间,大家接下来要好好训练啊!!!! 废话少说,进入正题: Problem A      SPOJ QUEST5 签到题: 将所有的边按照右端点排个序,然后每次选择没有钉住的点,然后把这之后的所有与它相交的边全去掉: 代码: #include <cstdio> #include <cstring>