自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(71)
  • 收藏
  • 关注

原创 hdu 1196 Lowest Bit

#includeint main(){ int i,n,a[10000],sum,j; while(~scanf("%d",&n)&&n) { sum=1; for(i=0;;i++) { a[i]=n%2; n=n/2; if(a[i]

2015-03-11 21:00:36 603

原创 hdu 1008 Elevator

ElevatorTime Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 46694    Accepted Submission(s): 25735 Problem DescriptionThe highest building in o

2014-12-23 16:41:57 646

原创 hdu 2010

#include#include#includeint main(){int m,n;int a,b,c;while(scanf("%d%d",&m,&n)!=EOF){int flag=0;if(m>n){int temp=n;n=m;m=temp;}for(int i=m;i<=n;i++){a=i/100;b=(i%100)/10;c=(i%100)%10;

2014-08-14 20:47:01 720

原创 hdu 2008

#includeint main(){ int n,i,j,k,m; double a[100]; while(scanf("%d",&n)&&n!=0) { j=0;k=0;m=0; for(i=0;i<n;i++) { scanf("%lf",&a[i]); if(a[i]<0) j++; else if(a[i]==0) k++;

2014-08-14 20:43:17 826

原创 hdu 2006

#includeint main(){ int n,a,sum,i; while(~scanf("%d",&n)) { sum=1; for(i=1;i<=n;i++) { scanf("%d",&a); if(a%2!=0) sum*=a; } p

2014-08-14 20:38:42 724

原创 hdu 2005 第几天?

#include int year,month,day,ans;int main(){ while(scanf("%d/%d/%d",&year,&month,&day)!=EOF){ ans=0; switch(month-1){ //这里需要减一,加的是上个月的时间,本月的只加天数 case 11: ans+=30; //c

2014-08-14 20:32:02 729

原创 hdu 2004 成绩转换

#includeint main(){ double x; while(~scanf("%lf",&x)) { if(x100) printf("Score is error!\n"); else { if(x<60) printf("E\n");

2014-08-14 20:21:34 629

原创 hdu 2003 求绝对值

#includeint main(){ double a; while(~scanf("%lf",&a)) { if(a<0) printf("%.2lf\n",-a); else printf("%.2lf\n",a); } return 0;}

2014-08-14 18:42:18 615

原创 hdu 2002 计算球体积

#include#define PI 3.1415927int main(){ double r,m; while(~scanf("%lf",&r)){ m=(4.0/3.0)*PI*(r*r*r); printf("%.3lf\n",m);}return 0;}

2014-08-14 18:36:29 738

原创 hdu 2001 计算两点间的距离

开始WA,两点间距离公式竟然写错了,想死的心都有了。。。。#include#includeint main(){ double x1,x2,y1,y2,m; while(~scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2)) { m=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); p

2014-08-14 18:23:07 756

原创 hdu 2000 ASCII码排序

#include#include#includeint cmp(const void *a,const void *b){ return *(char *)a-*(char *)b;}int main(){ int i; char str[4]; while(~scanf("%s",str)) { qsort(str,3,sizeo

2014-08-14 17:51:33 703

原创 hdu 2025 查找最大元素

#include#includeint main(){ int i,len; char str[110],max; while(~scanf("%s",str)) { len=strlen(str); max='A'; for(i=0;i<len;i++) if(str[i]>max) max=str

2014-08-14 17:31:07 812

原创 hdu 2054 A == B ?

库函数的运用。。。。#include#include#includeint a[100000],b[100000];void change(char *a){ int i,len; len=strlen(a); if (strstr(a,".")) for(i=len-1;a[i]=='0';i--) { a[i]='\0

2014-08-14 16:55:10 697

原创 hdu 1536 S-Nim|| poj 2960 S-Nim (sg函数)

#include #include int s[110];int sg[10010],hash[110];int n, m;int getsg(int x) //sg模板 { int i; if(sg[x] != -1) return sg[x]; memset(hash,0,sizeof(hash)); for(i = 0; i < n; i++) {

2014-08-13 18:07:30 1071

原创 hdu 1847 Good Luck in CET-4 Everybody!

法一:首先我们可以想到在面对3的时候是必败局,谁面对3时无论拿多少都会败 ! 那么就要尽量造成这样的局势给对方,因为任何不是3的倍数的数加1或2都可以变成3的倍数,同理减去1或2也可以变成3的倍数,也就是说假设目前的个数不是3的倍数,那我肯定能把它拿成3的倍数,比如现在是11个,那我拿走2个就变成9,这样就造成对方为3的倍数局势,那么对方拿m个我都可以通过拿

2014-08-12 21:49:50 851

原创 poj 1067 取石子游戏

威佐夫博奕。。。。。代码如下:#include#includeint main(){ int a,b,k,temp,n; double m; while(~scanf("%d%d",&a,&b)) { if(a>b) { temp=a; a=b; b=temp;

2014-08-12 15:37:18 677

原创 hdu 2177 取(2堆)石子游戏

天资愚笨啊,网上的一大堆没看懂。。。。。。总结百科的方法为:1.a==b同时减去a 得到0,02.a==a_k      b>b_kb -(b-b_k)3.a==a_k     b同时拿走a_k-a_(b-a_k)得到 a_(b-a_k)    a_(b-a_k) + b-a_k4.a>a_k       b==b_k

2014-08-11 23:46:19 971

原创 hdu 1527 取石子游戏

先解释一下威佐夫博弈吧:所谓威佐夫博弈,是ACM题中常见的组合游戏中的一种,大致上是这样的:有两堆石子,不妨先认为一堆有 10,另一堆有 15 个,双方轮流取走一些石子,合法的取法有如下两种:1、在一堆石子中取走任意多颗;2、在两堆石子中取走相同多的任意颗;约定取走最后一颗石子的人为赢家,求必胜策略。两堆石头地位是一样的,我们用余下的石子

2014-08-11 21:49:20 873

原创 poj 3480 John

详解见::hdu 1907 John - lihaogegehuting的专栏 - 博客频道 - CSDN.NET两道题一样。。。代码如下:#includeint main(){ int T,a[100],i,sum,m,ok; while(~scanf("%d",&T)) { while(T--) { sum=0;

2014-07-28 16:03:50 900

原创 hdu 2509 Be the Winner

详解:hdu 1907 John - lihaogegehuting的专栏 - 博客频道 - CSDN.NET两道题几乎一样代码如下:#includeint main(){ int T,a[100],i,sum,ok; while(~scanf("%d",&T)) { sum=0; ok=0;

2014-07-28 15:56:48 962

原创 hdu 1907 John

取火柴的游戏题目1:今有若干堆火柴,两人依次从中拿取,规定每次只能从一堆中取若干根, 可将一堆全取走,但不可不取,最后取完者为胜,求必胜的方法。   若sum=0;则先取者输,后取者胜;  若sum=!0,则先取者使其变成奇异状态,先取者胜 即谁先面临奇异状态谁输;题目2:今有若干堆火柴,两人依次从中拿取,规定每次只能从一堆中取若干根, 可将一堆全取走,但不可不取,

2014-07-28 00:38:45 1197

原创 hdu 1850 Being a Good Boy in Spring Festival

我们知道在Nim博弈中如果我们面对的是一个非奇异局势(a,b,c),要如何变为奇异局势呢?假设 a b)=(a(+)a)(+)(b(+)b)=0(+)0=0。要将c 变为a(+)b,只要从 c中减去 c-(a(+)b)即可。 也就是说,其中一个堆C必须大于所有其他所有堆异或的值,由此我们可以进行枚举即(sum^a[i])#includeint main()

2014-07-27 23:24:32 773

原创 hdu 1849 Rabbit and Grass

Nim博弈题意:有m堆牌,两个人先后取某堆中的任意(不少于一)张牌,最后取完者胜;问先手取胜第一次取牌有多少种取法。思路:1)如若给出 的是必败状态:a1^a2^......^an=0,则先手不会有任何可能获得胜利;           2)若给出的是必胜状态:a1^a2^.......^an=k,(其中k不为零),那么我们的目的是要把必胜状态        转化为

2014-07-27 22:47:37 746

原创 hdu 2987 邂逅明下

巴什博弈的变形:假设先取者为A,后取者为B,初始状态下有石子n个,除最后一次外其他每次取得石子个数必须在[p,q]之间。若当前石子共有n =(p+q)* r个,则A必胜,必胜策略为:A第一次取q个,以后每次若B取K个,A取(p+q-k)个,如此下去最后必剩下p个给B,所以A必胜。若n =(p+q)* r + left个(1 left  p)B必胜,必胜策略为:每次取石子活动中,若A

2014-07-27 16:38:44 996

原创 hdu 2516 取石子游戏

引用:http://blog.csdn.net/dgq8211/article/details/7602807有一堆个数为n的石子,游戏双方轮流取石子,满足:1)先手不能在第一次把所有的石子取完;2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。约定取走最后一个石子的人为赢家,求必败态。这个和之前的Wythoff

2014-07-27 15:25:47 842

原创 hdu 悼念512汶川大地震遇难同胞——选拔志愿者

简单的巴什博弈代码如下:  #includeint main(){ int n,m,c ; scanf("%d",&c); while(c--) { scanf("%d%d",&n,&m); if(n<m) printf("Grass\n"); else if(n%(m+1)==0) printf("Rabbit

2014-07-27 13:43:54 934

转载 博弈算法

有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 

2014-07-27 13:26:28 957

原创 hdu 1846 Brave Game

(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。    显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走

2014-07-27 13:24:49 815

原创 hdu 1248 寒冰王座

代码如下:#include#includeint dp[10000];int max(int a,int b){return a>b?a:b;}int main(){ int w[4]; int i,j,t,n; scanf("%d",&t); w[0]=150,w[2]=200,w[3]=350; while(t--) {

2014-07-25 23:43:07 929

原创 hdu 1114 Piggy-Bank

求最大价值:要求恰好装满背包,那么在初始化时除了dp[0]为0其它dp[1..V]均设为-∞    求最小价值:要求恰好装满背包,那么在初始化时除了dp[0]为0其它dp[1..V]均设为∞代码如下:  注意下标问题#includeint p[1008],w[1008];int dp[10000];int min(int a,int b){ret

2014-07-25 23:17:44 764

原创 hdu 2546饭卡

#include#include#includeint s[1050];int dp[1050];int cmp(const void *a,const void * b){ return *(int *)b-*(int *)a; }int maxx(int a,int b){return a>b?a:b;}int main(){ int n,i,j,sum,MA

2014-07-25 18:13:18 809

转载 poj 题目分类

把他整理出来的人不会m

2014-07-25 17:07:04 550

原创 HDU 1864 最大报销额

注意数组的大小,以及字符的输入问题#include#includeint dp[4000000],a[4],money[400];char s[120];double str[120];int max(int a,int b){return a>b?a:b;}int main(){ int N,sum,ans,ok,count,i,j,num; double Q

2014-07-25 15:29:16 733

原创 hdu 2602 Bone Collector

开始变量竟然输反了#include#includeint dp[1002];struct none{ int vo; int value;}a[1002];int max(int a,int b){return a>b?a:b;}int main(){ int N,V,T,i,j; scanf("%d",&T); while(T--) { sc

2014-07-24 22:13:15 646

原创 hdu 2995 Robberies

分析:01背包的概率问题当前的概率基于前一种状态的概率,即偷n家银行而不被抓的概率等于偷n-1家银行不被转的概率乘以偷第n家银行不被抓的概率。用dp[i]表示偷价值为 i 时不被抓的概率,则状态转移方程为:dp[j] = max(dp[j] , dp[j-m[i]] * (1-p[i]));自己写关键在01背包的转换,原意是提供银行个数和期望被捕概率,然后将每个银行的钱数和逃脱概率给出,通过将总数

2014-07-24 17:44:09 1133

原创 hdu 1203 I NEED A OFFER!

不懂得见算法背包问题详解代码如下:#includestruct node{ int cost; double wei;} a[10004];double min(double a,double b){ return a>b? b:a;}int main(){ int i,j,n,m; double dp[10004]; whil

2014-07-24 14:18:21 722

原创 背包算法

P01: 01背包问题 题目 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。 基本思路 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便

2014-07-23 17:09:06 2094

原创 poj 1664 放平果

此问题可分为两个子问题:当m所以m当m>=n时,可分为两种放法,一种为至少有一个盘子为空,则有f[m][n-1]种放法。另外为n个盘子都不为空,则先将n个苹果一个一个放入n的盘子中,剩下的m-n个苹果再放入n个盘子中。此放法就相当于m-n个苹果放n个盘子里面,有f[m-n][n]种放法。所以状态转移方程为f[i][j]:if(i>=j)f[i][j]=f[i][j-1]+f[i-j

2014-07-23 16:06:29 760

原创 poj 3370 Halloween treats

不懂得详见poj  2356  抽屉原理详解,这题竟然卡精度。。。提交了好几次都WA,改成long long sum[100100] 才对代码如下:#include#includeint flag[100100],a[100100],str[100100];long long sum[100100];int main(){ int n,i,j,t,chi; whi

2014-07-22 23:44:28 867

原创 poj 2356

题目大意就是先给出一个数N,接着再给出N个数,要你从这N个数中任意选择1个或多个数,使得其和是N的倍数如果找不到这样的答案 则输出0答案可能有多个,但智勇任意输出一个解就行。输出的第一行是选择元素的个数M,接着M行分别是选择的元素的值刚开始的时候并不同为什么这一题回事抽屉原理,分析后才明白,昨晚后更有体会实际上此题一定有解,不存在输出0的结果证明如下

2014-07-22 21:47:57 841

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除