Topcoder SRM 648 (div.2)
2015-02-02 23:11
302 查看
第一次做TC全部通过,截图纪念一下。
View Code
#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
相关文章推荐
- Topcoder SRM 648 Div.2 - A(水), B(枚举),C(DP/构造)
- TopCoder SRM 633 Div.2 500 Jumping
- TOPCODER SRM 648 -AB
- Topcoder Srm 648 DIV1
- 【topcoder第一弹】 SRM 144 Div.2 whatTime
- TopCoder SRM 639 Div.2 500 AliceGameEasy --乱搞
- Topcoder SRM 637 (Div.2)
- Topcoder srm 653 div.2 1000 - SingingEasy(区间DP)
- Topcoder SRM 565 Div.2
- Topcoder srm 653 div.2 500 - RockPaperScissorsMagicEasy(DP)
- TopCoder SRM 642 Div.2 1000 --二分+BFS
- Topcoder SRM 721 Div.2 A. FlightDataRecorder
- Topcoder SRM 721 Div.2 B. RememberWordsEasy
- TopCoder SRM 648 Div2 Problem 1000 - ABC (DP)
- Topcoder SRM 721 Div.2 C. ApocalypseEasy
- TopCoder SRM 634 Div.2[ABC]
- TopCoder SRM 639 Div.2 500 AliceGameEasy
- topcoder[SRM 377]外星语言
- topcoder srm 525 div1
- topcoder srm 605 div1