【原创】POJ 1703 && RQNOJ 能量项链解题报告
唉
不想说什么了
poj 1703,从看完题到写完第一个版本的代码,只有15分钟
然后一直从晚上八点WA到第二天早上
最后终于发现了BUG,题目要求的“Not sure yet.”,我打成了“No sure yet.”
然后是RQNOJ的NOIP真题,经典的能量项链
从看完题到写完伪码用了30分钟,敲完全部代码用了10分钟
WA 了7次,次次只能过前三个点,后面全部超时。
不能够啊?我动态规划了都,怎么可能超时?
开始优化主函数。
发现通过一个比较,能把N * (N-1)的复杂度降到C(N,2)。
改了后提交,很好,多过了一个点,继续超时
XXXX,我最后发现,居然在递归函数中漏写了if(dp[start][end] != 0)return dp[start][end];!!
当时心中真的是一万匹草泥马碾压而过,还我青春啊!
然后全部10ms内AC了10个点
最后上这两个冤家的代码
加起来送了我10+个WA了吧?
好险我是学法的
POJ 1703:
#include <stdio.h>
typedef struct man
{
int rev;
int parent;
}man;
man set[100008];
int set_find(int p)
{
if(p < 0)return -1;
if(set[p].parent < 0)return p;
return set[p].parent = set_find(set[p].parent);
}
void join(int p,int q)
{
p = set_find(p);
q = set_find(q);
if(p != q)set[p].parent = q;
}
void deal(int p,int q)
{
int tmp_rev1;
int tmp_rev2;
if(set[q].rev == -1)set[q].rev = p;
if(set[p].rev == -1)set[p].rev = q;
tmp_rev1 = set_find(set[p].rev);
tmp_rev2 = set_find(set[q].rev);
p = set_find(p);
q = set_find(q);
if(q != tmp_rev1)join(q,tmp_rev1);
if(p != tmp_rev2)join(p,tmp_rev2);
}
void searchSet(int p,int q)
{
p = set_find(p);
q = set_find(q);
if(p == q)
{
printf("In the same gang.\n");
}
else if(p == set_find(set[q].rev) || q == set_find(set[p].rev))
{
printf("In different gangs.\n");
}
else printf("Not sure yet.\n");
}
int main(void)
{
int T;
int N,M,i;
int CASE;
int num1,num2;
char command;
scanf("%d",&T);
while(T --)
{
scanf("%d%d",&N,&M);
if(N == 2)CASE = 1;
else CASE = 0;
for(i = 0;i <= N;i++)
{
set[i].parent = -1;
set[i].rev = -1;
}
for(i = 0;i < M;i++)
{
getchar();
command = getchar();
scanf("%d%d",&num1,&num2);
if(!CASE)
{
if(command == 'A')
{
searchSet(num1,num2);
}
else if(command == 'D')
{
deal(num1,num2);
}
}
else printf("In different gangs.\n");
}
}
return 0;
}
RQNOJ 能量项链:
#include <stdio.h>
int dp[200][200];
int value[200];
int N;
int pre(int a)
{
if(a == 0)return N - 1;
else return a - 1;
}
int next(int a)
{
if(a == N - 1)return 0;
else return a + 1;
}
int fun(int start,int end)
{
int tmp1,tmp2,i,j,max = 0,result;
if(dp[start][end] != 0)return dp[start][end];
if(start == end)return 0;
for(i = start;i != end;i = next(i))
{
tmp1 = fun(start,i);
tmp2 = fun(next(i),end);
result = tmp1 + tmp2 + value[start] * value[next(i)] * value[next(end)];
if(max < result)max = result;
}
return dp[start][end] = max;
}
int main(void)
{
int i,j,result;
int max,tmp1,tmp2;
scanf("%d",&N);
for(i = 0;i < N;i++)
scanf("%d",&value[i]);
max = 0;
int count = 0;
int size;
for(i = 0;i < N;i++)
{
size = N - i - 1;
count = 0;
for(j = i;count < size;j = next(j),count++)
{
tmp1 = fun(i,j);
tmp2 = fun(next(j),pre(i));
if(value[next(j)] < value[i])
result = tmp1 + tmp2 + value[i] * value[next(j)] * value[i];
else result = tmp1 + tmp2 + value[next(j)] * value[next(j)] * value[i];
if(max < result)max = result;
}
}
printf("%d\n",max);
return 0;
}
【原创】POJ 1703 && RQNOJ 能量项链解题报告的更多相关文章
- 【原创】leetCodeOj --- Sliding Window Maximum 解题报告
天,这题我已经没有底气高呼“水”了... 题目的地址: https://leetcode.com/problems/sliding-window-maximum/ 题目内容: Given an arr ...
- POJ 2054 Color a Tree解题报告
题干 Bob is very interested in the data structure of a tree. A tree is a directed graph in which a spe ...
- poj 3750 小孩报数问题 解题报告
题目链接:http://poj.org/problem?id=3750 约瑟夫问题,直接模拟即可. #include <iostream> #include <string> ...
- [SDOI2009]HH的项链解题报告
原题目:洛谷P1972 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断地收集新的贝壳,因此 ...
- 洛谷 P1972 [SDOI2009]HH的项链 解题报告
P1972 [SDOI2009]HH的项链 题目描述 HH 有一串由各种漂亮的贝壳组成的项链.HH 相信不同的贝壳会带来好运,所以每次散步完后,他都会随意取出一段贝壳,思考它们所表达的含义.HH 不断 ...
- [NOI2010]能量采集 解题报告
[NOI2010]能量采集 题目描述 栋栋有一块长方形的地,他在地上种了一种能量植物,这种植物可以采集太阳光的能量.在这些植物采集能量后,栋栋再使用一个能量汇集机器把这些植物采集到的能量汇集到一起. ...
- poj 3617 Best Cow Line 解题报告
题目链接:http://poj.org/problem?id=3617 题目意思:给出一条长度为n的字符串S,目标是要构造一条字典序尽量小,长度为n的字符串T.构造的规则是,如果S的头部的字母 < ...
- poj 2771 Guardian of Decency 解题报告
题目链接:http://poj.org/problem?id=2771 题目意思:有一个保守的老师要带他的学生来一次短途旅行,但是他又害怕有些人会变成情侣关系,于是就想出了一个方法: 1.身高差距 ...
- poj 1274 The Perfect Stall 解题报告
题目链接:http://poj.org/problem?id=1274 题目意思:有 n 头牛,m个stall,每头牛有它钟爱的一些stall,也就是几头牛有可能会钟爱同一个stall,问牛与 sta ...
随机推荐
- ACM-计算几何之Quoit Design——hdu1007 zoj2107
Quoit Design Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- [poj 2991]Crane[线段树表示向量之和,而非数量]
题意: 起重机的机械臂, 由n段组成, 对某一些连接点进行旋转, 询问每次操作后的末端坐标. 思路: 由于旋转会影响到该点之后所有线段的角度, 因此容易想到用线段树记录角度, 成段更新. (但是不是每 ...
- 【CSS3】transform-origin原点旋转
忙乱, 点 -moz-transform-origin: 0 0; -webkit-transform-origin:0 0; -o-transform-origin:0 0; 以右上角给原点 -mo ...
- 在ireport中使用checkbox
在网上搜索了很多实现checkbox的办法, 主要是利用打钩图片实现. 下面是我的做法,也不怎么高明, 不过比利用图片好. 后台 map.put("lifeTimePartFlag" ...
- 基于CefGlue的桌面应用开发
原文地址:http://johnnyfee.github.io/csharp/2013/12/21/cef-glue/ 前言 如果你想使用WEB技术来开发桌面客户端,并且是想使用的语言也是C#时,那请 ...
- Wix学习整理(4)——关于WiX文件格式和案例HelloWorld的分析
原文:Wix学习整理(4)--关于WiX文件格式和案例HelloWorld的分析 关于WiX文件格式 .wxs是WiX的源文件扩展名..wxs文件以类XML文件的格式来指定了要构造Windows In ...
- 每天进步一点点——Linux磁盘管理LVM与RAID
转载请注明出处:http://blog.csdn.net/cywosp/article/details/38965799 1. 传统磁盘管理问题 当分区大小不够用时无法扩展其大小,仅仅能通过加入硬盘. ...
- 【译】ASP.NET MVC 5 教程 - 3:添加视图
原文:[译]ASP.NET MVC 5 教程 - 3:添加视图 在本节内容中,我们将修改HelloWorldController类,使用视图模板来干净利索的封装生成HTML响应客户端的过程. 您将创建 ...
- 向日葵sunlogin配置
客户端配置: xxxx@TIM sunlogin_linux_1.0.0.25020]$ lsbin html install_sunlogin.sh readme.txt script u ...
- iOS使用CoreImage处理图像40中可用的滤镜名称
NSString* localPath = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"jpg"] ...