TOJ 2232 A Friendly Game 解题

题目很有意思。
女生找男朋友的问题。
以天津大学为背景,表现出男生比女生多的这个问题。
解决方法就是一个简单的dp问题了。
data[i][j]表示还剩下i个女生j个男生。
状态转移方程
data[i][j]=max{data[i][j-1],data[i-1][j-1]+map[i][j]};

 1#include<stdio.h>
 2//#define int long long 
 3int data[600][600];
 4int map[600][600];
 5#define oo -2000000001
 6void di(int i,int j)
 7{
 8    int max;
 9    if(i==0)
10    {
11        data[i][j]=0;
12        return;
13    }

14    if(i>j)
15    {
16        data[i][j]=oo-1;
17        return;
18    }

19    max=oo-1;
20    if(i-1>=0 && j-1>=0)
21    {
22        if(data[i-1][j-1]==oo)di(i-1,j-1);
23        if(data[i-1][j-1]+map[i][j]>max)
24            max=data[i-1][j-1]+map[i][j];
25    }

26    if(j-1>=0)
27    {
28        if(data[i][j-1]==oo)di(i,j-1);
29        if(data[i][j-1]>max)
30            max=data[i][j-1];
31    }

32    data[i][j]=max;
33    return;
34
35}

36int main()
37{
38    int i,j,n,m;
39    while(scanf("%d%d",&n,&m))
40    {
41        if(n==0 && m==0)break;
42        for(i=1;i<=n;i++)
43            for(j=1;j<=m;j++)scanf("%d",&map[i][j]);
44        for(i=0;i<=n;i++)
45            for(j=0;j<=m;j++)data[i][j]=oo;
46        di(n,m);
47        printf("%d\n",data[n][m]);
48    }

49    return 0;
50}

51


 

posted on 2008-07-15 19:28 gong 阅读(111) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2008年7月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

常用链接

留言簿(6)

随笔档案

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜