比赛 10101115 评测结果 TTTTTTTTTT
题目名称 技能树 最终得分 0
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-11-15 10:20:01
显示代码纯文本
#include <fstream>

#define I_F "skill.in"
#define O_F "skill.out"
#define MAX 50

using namespace std;

long s[MAX][MAX];
bool f[MAX][MAX]={{false}};
short m,n;
long ans;

void Input();
bool Pd(short x, short y);
void Dfs(short x, short y, short m, long sum);
void Output();

int main()
{
	Input();
	Dfs(0,0,m,0);
	Output();
	return 0;
}

void Input()
{
	ifstream fin(I_F);
	fin>>n>>m;
	short i,j;
	for (i=0; i<n; i++)
		for (j=0; j<n-i; fin>>s[i][j++]);
	fin.close();
}

bool Pd(short x, short y)
{
	if (x==0)
		return true;
	else
		return (f[x-1][y]&&f[x-1][y+1]);
}

void Dfs(short x, short y, short m, long sum)
{
	if ((x==n-1)&&(y==2))
	{
		if (sum>ans)
			ans=sum;
	}
	else
	{
		short tx,ty;
		if ((y<n-x-1)||(x==n-1))
		{
			tx=x;
			ty=y+1;
		}
		else
		{
			tx=x+1;
			y=0;
		}
		if (Pd(x,y)&&(m>0))
		{
			f[x][y]=true;
			Dfs(tx,ty,m-1,sum+s[x][y]);
			f[x][y]=false;
		}
		Dfs(tx,ty,m,sum);
	}
}

void Output()
{
	ofstream fout(O_F);
	fout<<ans<<'\n';
	fout.close();
}