poj 1037 A decorative fence ( dp+输出第k字典序)(二)

2014-11-24 10:54:37 · 作者: · 浏览: 1
#include #pragma comment (linker,"/STACK:102400000,102400000") #define maxn 10005 #define MAXN 31290 #define OO (1<<31)-1 #define mod 100000000 #define INF 0x3f3f3f3f #define pi acos(-1.0) #define eps 1e-6 typedef long long ll; using namespace std; ll n,m,ans,cnt,tot,flag; ll dp[25][25][2]; bool vis[25]; int main() { ll i,j,k,s,t; memset(dp,0,sizeof(dp)); dp[1][1][0]=dp[1][1][1]=1; for(i=2; i<=20; i++) { for(j=1; j<=i; j++) { for(k=1; k >t; while(t--) { cin>>n>>m; vector res; memset(vis,0,sizeof(vis)); flag=0; for(j=1; j<=n&&!flag; j++) // 确定第一位 { for(k=0; k<=1; k++) // up or down { if(m-dp[n][j][k]<=0) // 第一位为 j 状态为 k { res.push_back(j); vis[j]=flag=1; break ; } else m-=dp[n][j][k]; } } for(i=1; i