| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1076 人关注过本帖
标题:[已解决]ACM
只看楼主 加入收藏
zgwxwn
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2006-4-24
收藏
得分:0 

可以用递归的
f(i,j) = f(i+1,j)+f(i,j+1);
不过可能会超时


coding & enjoying
2006-12-01 23:27
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
收藏
得分:0 
能用C语言编一下吗?
2006-12-01 23:30
ccmmss302
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-11-16
收藏
得分:0 
如下程序尚未考虑马的控点
#include "stdio.h"
#define X 6
#define Y 6
main()
{int a[7][9],i,j,k,n=0;
for(i=1;i<=X;i++)
{if(i==X)a[i][Y]=1;
else a[i][Y]=0;
}
for(j=Y-1;j>=0;j--)
for(i=1;i<=X;i++)
{a[i][j]=0;
for(k=i;k<=X;k++)
a[i][j]+=a[k][j+1];
}
for(j=0;j<=Y;j++)
{a[0][j]=0;
for(i=1;i<=X;i++)
a[0][j]+=a[i][j];
n+=a[0][j];
}
printf("\nn=%d\n",n);
}
2006-12-02 06:31
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
收藏
得分:0 
马的控点是难点啊,没有的话这道题就简单了
继续思考中
2006-12-02 08:56
乌鸦丘比特
Rank: 1
等 级:新手上路
威 望:2
帖 子:625
专家分:0
注 册:2004-7-19
收藏
得分:0 
DP是可以的,用滚动数组空间复杂度可以降到O(N),时间复杂度O(N^2)
组合数学方法值得考虑

我喜欢创造,一只扑腾着翅膀向天空飞翔的乌鸦
2006-12-02 09:12
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
收藏
得分:0 

#include<stdio.h>


long long path[21][21];
int dir[8][2]={{1,2},{1,-2},{2,1},{2,-1},
{-1,2},{-1,-2},{-2,1},{-2,-1}};

int main()
{
int i,j,k;
int n,m,x,y;
scanf("%d%d%d%d",&n,&m,&x,&y);


path[1][1]=1;
for(i=0;i<21;i++)
path[i][0]=path[0][i]=0;
for(i=1;i<=n;i++)
{
for(j=2;j<=m;j++)
{
path[i][j]=0;
if(i==x &&j==y)continue;
for(k=0;k<8;k++)
{
if(i+dir[k][0]!=x || j+dir[k][1]!=y)
continue;
else break;
}
if(k==8)
{
path[i][j]=path[i-1][j]+path[i][j-1];
}

}
}
printf("%d",path[n][m]);
return 0;
}
这是小弟的程序,但是通不过,不知错在哪里

[此贴子已经被作者于2006-12-2 9:20:19编辑过]

2006-12-02 09:17
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 
以下是引用yelo20053533在2006-12-1 23:02:38的发言:

啥意思,看不懂

其中write就是printf,read就是scanf,其余如if等都是类伪代码的,这个好象是标程,据说时间复杂度是很低的(效率很高),以下是我帮你翻译为C代码

[此贴子已经被作者于2006-12-2 14:31:45编辑过]


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-02 14:13
卧龙孔明
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:59
帖 子:3872
专家分:684
注 册:2006-10-13
收藏
得分:0 

/*SK-CHINA 特别为你翻译的,应该是最好的算法*/


int dx[9] = {0,-2, -1, 1, 2, 2, 1, -1, -2};
int dy[9] = {0,1, 2, 2, 1, -1, -2, -2, -1};
int n, m, x, y, i, j;
int g[21][21];
double f[21][21];

int main(void) {
scanf("%d%d%d%d",&n,&m,&x,&y);
memset(g,0,sizeof(g));

g[x][y]=1;
for(i=1;i<=8;i++)
if((x + dx[i] >= 0)&&(x + dx[i] <= n)&&(y + dy[i] >= 0)&&(y + dy[i] <= m)) g[x + dx[i]][ y + dy[i]] = 1;
f[0][0] = 1;
for(i=1;i<=n;i++)
if(g[i][0] == 0) f[i][0] = f[i - 1][0];
for(i=1;i<=m;i++)
if(g[0][i] == 0) f[0][i] = f[0][i - 1];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(g[i][j] == 0) f[i][j] = f[i - 1][ j] + f[i][j - 1];
printf("%.0lf",f[n][m]);
getch();
return 0;
}


My Blog: www.aiexp.info
虽然我的路是从这里开始的,但是这里不再是乐土.感谢曾经影响过,引导过,帮助过我的董凯,飞燕,leeco,starwing,Rockcarry,soft_wind等等等等.别了,BCCN.
2006-12-02 14:31
yelo20053533
Rank: 1
等 级:新手上路
帖 子:161
专家分:0
注 册:2006-11-27
收藏
得分:0 

谢谢,已经解决了,刚看到你的翻译,谢谢
我的算法有些麻烦,但是也过了,最难的是电话号码,内存总超

2006-12-02 14:48
快速回复:[已解决]ACM
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020448 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved