比赛 |
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();
}