2011年7月20日

摘要: 状态转移方程: dp[i][j]=map[i][j].r * (dp[i][j+1]+2) + map[i][j].d * (dp[i+1][j]+2) + map[i][j].s * (dp[i][j]+2) (dp[i][j]用来记录期望)于是乎,等式两边都有 dp[i][j],此时应当进行移项!得到新的转移方程:dp[i][j]=[map[i][j].r * (dp[i][j+1]+2) + map[i][j].d * (dp[i+1][j]+2) + map[i][j].s*2]/(1-map[i][j].s)由此方程我们可知, 如果分母 map[i][j].s=1 ,dp[i][j] 阅读全文
posted @ 2011-07-20 09:19 Eucalyptus 阅读(546) 评论(0) 推荐(0) 编辑
摘要: 数学题,始终不懂为毛要用首尾顺次相接的向量来进行叉乘稀里糊涂过了。。扔垃圾桶吧。。。#include <stdio.h>int n;struct Tpoint { int x; int y; } a[100000]; struct Tvector { int x; int y; } b[100000];int flag;int main(){ while (scanf("%d",&n),n) { for(int i=0;i<n;i++) { scanf ("%d%d",&a[i].x,&a[i].y); } fo 阅读全文
posted @ 2011-07-20 08:10 Eucalyptus 阅读(218) 评论(0) 推荐(0) 编辑

2011年7月18日

摘要: 诶。。思路极端不清晰的情况下选择邻接表来写这题。。写一半才发现用矩阵会好很多。。好吧。。一会改用矩阵。。失败的代码贴出:#include <stdio.h>#include <string.h>#define MAXN 510#define inf 1000000000int n,m;double value[MAXN*MAXN];int head[MAXN],next[MAXN*MAXN],point[MAXN*MAXN];int tot;int dist[MAXN],used[MAXN],prev[MAXN];int print[MAXN];int printcou 阅读全文
posted @ 2011-07-18 17:26 Eucalyptus 阅读(245) 评论(0) 推荐(0) 编辑
摘要: 这篇豆瓣上的文章很好,可惜分不够不能直接下载,附传送门:http://www.docin.com/p-169921751.html 阅读全文
posted @ 2011-07-18 00:40 Eucalyptus 阅读(118) 评论(0) 推荐(0) 编辑

2011年7月17日

摘要: 修改条件的DIJKSTRA。。。这都搞了一下午。。。郁闷了。。。松弛条件修改为:dist[i]=max(dist[minp],edge[minp][i]) (dist用来记录构成路径的最短边集合中的最长边(很绕口啊。。。公认的))还有 要注意边界处理 先把dist[i]设置为edge[0][i]呃。。大概就这么多。。好久不写最短路了。。缺乏练习啊。。#include <stdio.h>#include <string.h>#include <math.h>#define MAXN 210#define inf 1000000000struct Tpoint 阅读全文
posted @ 2011-07-17 23:50 Eucalyptus 阅读(240) 评论(0) 推荐(0) 编辑

2011年7月16日

摘要: 今天小研究了一下MAC的终端命令,主要为了方便调试程序用,XCODE用不来啊。。。在这里记下。。防止丢失pwd 当前工作目录cd(不加参数) 进rootcd(folder) 进入文件夹cd .. 上级目录cd ~ 返回rootcd - 返回上一个访问的目录rm 文件名 删除cat 文件名(|less) 在终端下查看文件ls 列出目录下所有文件cp 文件名 目标目录 将文件拷贝到目标目录下~代表root 如:~/Document/CPP2/mkdiv 新建文件夹g++ 源文件名 编译源文件,产生a.out./文件名 运行 例如:./a.out < 输入文件名 > 输出文件名contr 阅读全文
posted @ 2011-07-16 01:28 Eucalyptus 阅读(23234) 评论(0) 推荐(3) 编辑

2011年7月15日

摘要: 安排车厢 X中学的同学们要去春游了,他们春游的地点非常遥远,所以学校安排的交通工具是火车!现在所有的同学都已经在火车站进站口等待了,一共n名同学,他们排成了一行按照这个顺序登车。一节火车厢最多可以容纳m名同学,但是由于某种奇特的原因,一节车厢里只允许要么所有的同学都是同一种性别,要么男生和女生的人数差不能超过k,现在请问学校该怎样安排同学们才能使得用到的车厢尽量的少呢?输入文件 第一行三个数,分别表示n(n<= 1000),m和k 接下来n行描述排队的顺序,每行一个字母,表示是B(boy)或者是G(girl)输出文件 一个整数表示至少需要的车厢数。样例输入5 4 1BGGGB样例输出2状 阅读全文
posted @ 2011-07-15 03:51 Eucalyptus 阅读(493) 评论(0) 推荐(0) 编辑
摘要: 引例:给出一个字符串给出一个包含n个单词的字典要求把单词划分成尽量少的子段,使得每 个小段都是字典中的一个单词字符串 = ABABACABA字典 = {A,AB,BA,CA,BBC}字符串划分: AB|A|BA|CA|BA对于该例,可以得出状态转移方程: inf (无符合字典中的串)dp[i]= (0<k<l) (l表示字典中最长单词的长度) min{dp[i-k]}+1 (K的值符合:dp[i-k]到dp[i]组成字典中的一个单词)总结模型特点:将一个线性实例划分成若干份,每份满足 若干条件,要求目标函数最优状态:F[i]为前i个元素划分完毕后最优函数转移决策:关注前i个元素划分 阅读全文
posted @ 2011-07-15 00:45 Eucalyptus 阅读(551) 评论(0) 推荐(0) 编辑

2011年7月13日

摘要: 亚马逊棋的规则简介:1.在10*10的棋盘上,每方有四个棋子(四个Amazons);2.每个棋子都相当于国际象棋中的皇后,它们的行棋方法与皇后相同,可以在八个方向上任意行走,但不能穿过阻碍;3.当轮到一方行棋时,此方只能而且必须移动四个Amazons中的一个,并在移动完成后,由当前移动的棋子释放一个障碍,障碍的释放方法与棋子的移动方法相同(皇后的走法,不能穿过障碍),同样障碍的放置也是必须的;4.当某方完成某次移动后,对方四个棋子均不能再移动时,对方将输掉比赛;5.每次开局位于棋盘下方的玩家先手;6.整个比赛中双方均不能吃掉对方或己方的棋子或障碍。亚马逊棋的走法生产:1.亚马逊棋的走法分为两步 阅读全文
posted @ 2011-07-13 13:03 Eucalyptus 阅读(3480) 评论(0) 推荐(0) 编辑
摘要: 呃。。。比赛的时候没弄出来。。。做了输入优化,关键在于HASH(见注释)C++,1609MS:#include<stdio.h>#include<string.h>char hash[10010];int num;int bee;int tot;char c;int n;int main(){ int T; scanf("%d",&T); while (T--) { bee=0; tot=0; num=0; memset(hash, 0, sizeof(hash)); scanf("%d",&n); getchar 阅读全文
posted @ 2011-07-13 02:21 Eucalyptus 阅读(556) 评论(0) 推荐(0) 编辑