- 博客(22)
- 收藏
- 关注
原创 博弈论(巴什博奕,威佐夫博弈,尼姆博弈,斐波那契博弈)
一. 巴什博奕(Bash Game) A和B一块报数,每人每次报最少1个,最多报4个,看谁先报到30。这应该是最古老的关于巴什博奕的游戏了吧。其实如果知道原理,这游戏一点运气成分都没有,只和先手后手有关,比如第一次报数,A报k个数,那么B报5-k个数,那么B报数之后问题就变为,A和B一块报数,看谁先报到25了,进而变为20,15,10,5,当到5的时候,不管A怎么报数,最后一个数肯定是
2014-11-30 18:37:55 17466 6
原创 HDU2955 Robberies 01背包
题目大意:Roy要抢劫银行,每抢一个银行都有一定的被抓概率,现在给你一个安全概率,以及每个银行的库存现金和抢劫该银行被抓的概率,问你在安全概率的情况下Roy最多可以抢劫多少现金。乍一看是背包问题,其实就是背包问题,只要稍微变形一下就行了,可以看出,本题中安全概率是背包的容量,每个银行的被抓概率是质量,但这样肯定是行不通的,因为我们要用dp[ i ]数组来纪录质量为i时的最大价值,那么质量显然要
2014-11-26 13:56:53 609
原创 HDU2571 命运 动态规划
#include #include #include #define INF -999999999using namespace std;int main(){ int t,n,m,i,j; int ans[25][1005],dp[25][1005]; cin>>t; while(t--) { memse
2014-11-23 14:19:01 539
原创 HDU2050 折线分割平面 动态规划
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2050 分析:首先我们来看一直线分割平面,直线分割平面时,每增加n个结点,就会增加n+1个平面,我们用f(n)来表示n条直线最多分割出的平面数,那么就有f(n)=f(n-1)+n;其中f(1)=2;即每新加一条直线,都使他和原先所有的直线都有交点,原先有n-1条直线,那么新加一条直线后,就会
2014-11-23 11:10:47 1191
原创 HDU2049 不容易系列之(4)——考新郎 错排问题
错排问题。先从n对新人中找出n-m对找对新娘的人,然后把剩下的m对错位排列一下,然后乘法原理把两个数相乘即可。n和m的范围不大,打表即可。#include #include using namespace std;int main(){ int t,n,m,i,j; long long f[25],c[25][25]={{0,1}}; f[0]=1;
2014-11-22 11:05:12 530
原创 HDU2066 一个人的旅行 单源最短路径
#include #include #define MAX 1010#define INF 999999999using namespace std;bool s[MAX];int ans[MAX][MAX],dist[MAX];void Dijkstra(int n,int v){ int i,j,u,temp; for(i=1;i
2014-11-21 15:17:34 600
原创 学习资料汇总(网址汇总)
本帖持续更新中....发现比较不错的就贴过来了(1)http://classfoo.com 语言资料库 里面很多东西挺不错的,没事可以去看看,推荐几个个人认为比较不错的: 算法库:http://classfoo.com/ccby/article/tZTzs std::vector: http://classfoo.com/ccby/article/jn
2014-11-21 14:07:50 1290
原创 HDU 2048 神、上帝以及老天爷 错排问题
错位排列数D[n]=n!【1-1/1!+1/2!-......+(-1)^n*1/n!】;可以知道D[n]是满需以下两条的:(1)D[1]=0;D[2]=1;即只有一个人的情况,他的错排数为0,两个人时只有一种错排可能。(2)D[n]=(n-1)(D[n-1]+D[n-2]);对于n>2的情况可以分两步来考虑:第一步,我们把第一个位置上的数放到剩下的n-1个位置当中的一个,
2014-11-21 13:04:18 577
原创 HDU 1051 Wooden Sticks 贪心
题目大意:#include #include #include #define MAX 5050using namespace std;typedef struct node{ int l,w,flag;}Stick;Stick wood[MAX];int cmp(const Stick &a,const Stick &b){ if(
2014-11-21 12:39:00 455
原创 HDU1874 畅通工程续 单源最短路径
#include #include #define MAX 999999999using namespace std;int s[210];int dist[210],ans[210][210];void Dijkstra(int n,int v){ int i,j,u,temp; for(i=0;i { dist[i]=
2014-11-19 20:29:44 636
原创 HDU2112 HDU Today 单源最短路
#include #include #include #include #include #include #define INF 999999999#define MAX 200using namespace std;int s[MAX],n[MAX];int dist[MAX],ans[MAX][MAX];void Dijkstra(int n,in
2014-11-15 12:36:50 539
原创 单源最短路径问题 Dijkstra算法
算法#define INF 999999999#define MAX 10005bool s[MAX];int dist[MAX],ans[MAX][MAX];void Dijkstra(int v,int n){ int newdist,temp,u,i,j; for(i=1;i { dist[i]=ans[v][i];
2014-11-12 14:07:29 575
原创 HDU2139 Calculate the formula
纯数学题#include #include using namespace std;int main(){ long long n; while(cin>>n) printf("%lld\n",n*(n+1)*(n+2)/6); return 0;}
2014-11-10 09:42:14 983 1
原创 HDU2137 circumgyrate the string 模拟题
circumgyrate the string#include #include #include using namespace std;int main(){ char str[100]; int n,i,j; while(scanf("%s%d",str,&n)!=-1) { if(n>=0) n%=8
2014-11-07 21:00:32 474
原创 HDU2136 Largest prime factor
给出#include #include const int MAX=1e6;using namespace std;long long prime[MAX];int main(){ long long num,i,j,n; memset(prime,0,sizeof(prime)); prime[1]=0; num=0;
2014-11-06 12:56:11 361
原创 HDU2135 Rolling table 模拟题
题目大意:#include #include using namespace std;int main(){ char ans[12][12]; int m,n,i,j; while(cin>>n>>m) { for(i=0;i scanf("%s",ans[i]); if(m
2014-11-06 10:02:07 624
原创 HDU2133 What day is it 模拟题
计算#include #include using namespace std;int main(){ int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int month1[13]={0,31,29,31,30,31,30,31,31,30,31,30,31}; int y,m,d,da
2014-11-06 08:40:20 495
原创 双向链表的有关操作(创建,遍历,插入,删除)
#include #include #include using namespace std;typedef struct node{ int ans; struct node *prior,*next;}Node,*DLinklist;//初始化头结点DLinklist init(DLinklist h){ h=(Node *)m
2014-11-04 19:34:07 2989
原创 HDU1025 Constructing Roads In JGShining's Kingdom
#include #include #include #define MAX 500005using namespace std;int ans[MAX];int stack[MAX];int LIS(int temp,int len){ int left=1,right=len; int mid; while(left {
2014-11-03 13:09:11 502
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人