【原创】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 ...
随机推荐
- POJ 2318 TOYS(计算几何)
跨产品的利用率推断点线段向左或向右,然后你可以2分钟 代码: #include <cstdio> #include <cstring> #include <algorit ...
- 基于SIFT+Kmeans+LDA的图片分类器的实现
原地址:http://www.cnblogs.com/freedomshe/archive/2012/04/24/2468747.html 题记:2012年4月1日回到家,南大计算机研究僧复试以后,等 ...
- Hbase经常使用命令
hbase shell命令的使用 再使用hbase 命令之前先检查一下hbase是否执行正常 hadoop@Master:/usr/hbase/bin$ jps 2640 HMaster 27170 ...
- Spark SQL Catalyst源代码分析Optimizer
/** Spark SQL源代码分析系列*/ 前几篇文章介绍了Spark SQL的Catalyst的核心运行流程.SqlParser,和Analyzer 以及核心类库TreeNode,本文将具体解说S ...
- JavaScript 基础优化(读书笔记)
1.带有 src 属性的<script>元素不应该在其<script>和</script>标签之间再包含额外的 JavaScript 代码.如果包含了嵌入的代码,则 ...
- 传京东副总裁蒉莺春或将接管POP业务-搜狐IT
传京东副总裁蒉莺春或将接管POP业务-搜狐IT 传京东副总裁蒉莺春或将接管POP业务
- java的url
中国的争论导致了扭曲
话不多说,,直接粘代码 发件人 UrlParaCode.jsp <%@ page language="java" import="java.util.*" ...
- Linux lamp环境编译安装
1.安装准备: 1)httpd-2.0.52.tar.gz 2)mysql-4.1.12.tar.gz 3)libxml2-2.6.27.tar 4)freetype-2.1.10.tar 5)gd- ...
- android File文件的读写操作
本程序实现两个文本框和两个按钮,其中一个文本框和一个按钮用于读取文件内容.另一个文本框和另一个按钮用于写入. java代码: package com.example.activity; import ...
- 使用JS模拟出Map对象
近期要做的一个项目,支持方提供的一个Map方法,用着相当能够,功能稍有欠缺,因此我为之做了扩展,下面是代码: function Map() { this.elements = new Array(); ...