您的位置:首页 > 运维架构

Topcoder SRM 648 (div.2)

2015-02-02 23:11 302 查看
第一次做TC全部通过,截图纪念一下。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<queue>
#include<string>
#include<sstream>
#define eps 1e-9
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define MAXN 1005
#define MAXM 40005
#define INF 0x3fffffff
using namespace std;
typedef long long LL;
int i,j,k,n,m,x,y,T,big,cas,num;
bool flag;
int dp[35][35][35][440];
string ans;

class ABC
{
public:

void out(int x,int y,int z,int s)
{
if (x<=0&&y<=0&&z<=0&&s<=0) return;
if (dp[x][y][z][s]==1)
{
out(x-1,y,z,s);
ans+="A";
}else
if (dp[x][y][z][s]==2)
{
out(x,y-1,z,s-x);
ans+="B";
}else
{
out(x,y,z-1,s-x-y);
ans+="C";
}
}

string createString(int n, int c)
{
int i,j,k,l;

dp[0][0][0][0]=1;
for (i=0;i<=n;i++)
{
for (j=0;i+j<=n;j++)
{
for (k=0;i+j+k<=n;k++)
{
for (l=0;l<=c;l++)
{
if (dp[i][j][k][l])
{

if (i+j+k==n && l==c)//找到答案,输出
{
out(i,j,k,l);//递归输出
return ans;
}

dp[i+1][j][k][l]=1;
if (l+i<=c) dp[i][j+1][k][l+i]=2;
if (l+i+j<=c) dp[i][j][k+1][l+i+j]=3;
}
}
}
}
}

return "";

}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: