题目很有意思。
女生找男朋友的问题。
以天津大学为背景,表现出男生比女生多的这个问题。
解决方法就是一个简单的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
3
int data[600][600];
4
int map[600][600];
5
#define oo -2000000001
6
void 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
}
36
int 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