http://codeforces.com/gym/100405

D题

题在pdf里

codeforces.com/gym/100405/attachments/download/2331/20132014-acmicpc-northwestern-european-regional-contest-nwerc-13-en.pdf

D - Diagrams & Tableaux
A Young diagram is an arrangement of boxes in rows and columns conforming to the following
rules:
the boxes in each row and each column are contiguous,
the left borders of all rows are aligned, and
each row is not longer than the one above.
Here are some examples of Young diagrams:
A semi-standard Young tableau for a given number N is a Young diagram that has its boxes
filled according to the following rules:
Each box contains a single integer between 1 and N, inclusive,
each integer is greater than or equal to the integer in the box to its left, and
each integer is strictly greater than the integer in the box above.
Here is a list of all semi-standard Young tableaux for N = 3, based on a particular Young
diagram:
1
2
1 1
3
1 1
2
2 1
3
2 1
2
3 1
3
3 2
3
2 2
3
3
Your task is to count how many semi-standard Young tableaux are possible, based on a given
Young diagram, with a given N.
Input
Each test case consists of two lines. The first line of each test case specifies the Young diagram.
This line starts with the number k satisfying 1 k 7, the number of rows, followed by k
positive integers l1, l2, . . . , lk. These integers specify the number of boxes on each row of the
Young diagram, and they satisfy 7 l1 l2 lk 1. The second line contains the
integer N, satisfying k N 7.
Output
For each test case, print one line containing the number of semi-standard Young tableaux
based on the given Young diagram, with the given N.
9
Problem D: Diagrams & Tableaux
Example
input output
1 1
1
1 1
2
2 2 1
4
4 3 2 1 1
4
1
2
20
20
10

题意:

给出一个那种形状,由很多个方格组成。每个方格中可以放1~N中的一个数,要求方格中的数大于上面相邻方格中的数,大于等于左边相邻方格的数。求有多少种放法。

给出k,表示有k行,然后给出各行的方格数。然后给出N。

题解:

状压DP。

因为一列要求下面大于上面,即不能等于,每种数字只能用一次,可以用状态的二进制位表示有无哪个数字,于是2^7=128,用0~127就能表示一列的所有状态。

然后状态转移,相邻两列转,枚举所有情况也就127^2。

然后一共最多7列,转转就得了。

注意结果大,用long long。

代码:

 //#pragma comment(linker, "/STACK:102400000,102400000")
#include<cstdio>
#include<cmath>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<map>
#include<set>
#include<stack>
#include<queue>
using namespace std;
#define ll long long
#define usll unsigned ll
#define mz(array) memset(array, 0, sizeof(array))
#define mf1(array) memset(array, -1, sizeof(array))
#define minf(array) memset(array, 0x3f, sizeof(array))
#define REP(i,n) for(i=0;i<(n);i++)
#define FOR(i,x,n) for(i=(x);i<=(n);i++)
#define RD(x) scanf("%d",&x)
#define RD2(x,y) scanf("%d%d",&x,&y)
#define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z)
#define WN(x) printf("%d\n",x);
#define RE freopen("D.in","r",stdin)
#define WE freopen("huzhi.txt","w",stdout)
#define mp make_pair
#define pb push_back
#define pf push_front
#define ppf pop_front
#define ppb pop_back
const double pi=acos(-1.0);
const double eps=1e-; int k,n;
int a[]; //int cntt[133];
int cnt(int st) {
//if(cntt[st]!=-1)return cntt[st];
int t=,tt=st;
while(tt) {
if(tt&)t++;
tt>>=;
}
//cntt[st]=t;
return t;
} //int okk[133][133];
int ok(int j,int k) {
//if(okk[j][k]!=-1)return okk[j][k];
if(cnt(j)<cnt(k)) {
//okk[j][k]=0;
return ;
}
int tk=k,tj=j,ck=,cj=;
while(tk) {
if(tk&==) {
while(tj) {
if(tj&==) {
if(cj>ck) {
//okk[j][k]=0;
return ;
}
cj++;
tj>>=;
break;
}
cj++;
tj>>=;
if(!tj)while();
}
}
ck++;
tk>>=;
}
//okk[j][k]=1;
return ;
} ll d[][];
int c[],mj; ll farm() {
int i,j;
int maxst=<<n;
//printf("maxst = %d\n",maxst);
mz(d);
FOR(k,,maxst-)
if(cnt(k)==c[])d[][k]=; FOR(i,,mj) {
FOR(j,,maxst-) {
FOR(k,,maxst-) {
if(d[i-][j]!= && cnt(k)==c[i] && cnt(j)==c[i-] && ok(j,k)) {
d[i][k]+=d[i-][j];
//printf("d[%d][%x]=%I64d , d[%d][%x]=%I64d\n",i-1,j,d[i-1][j] ,i,k,d[i][k]);
}
}
}
}
ll re=;
FOR(i,,maxst-)re+=d[mj][i];
return re;
} int main() {
int i,j;
//mf1(cntt);
//mf1(okk);
while(RD(k)!=EOF) {
mz(c);
FOR(i,,k) {
RD(a[i]);
FOR(j,,a[i])c[j]++;
}
mj=a[];
RD(n);
printf("%I64d\n",farm());
}
return ;
}

codeforces Diagrams & Tableaux1 (状压DP)的更多相关文章

  1. UVaLive 6625 Diagrams & Tableaux (状压DP 或者 DFS暴力)

    题意:给一个的格子图,有 n 行单元格,每行有a[i]个格子,要求往格子中填1~m的数字,要求每个数字大于等于左边的数字,大于上边的数字,问有多少种填充方法. 析:感觉像个DP,但是不会啊...就想暴 ...

  2. codeforces#1215E. Marbles(状压DP)

    题目大意:给出一个由N个整数组成的序列,通过每次交换相邻的两个数,使这个序列的每个相同的数都相邻.求最小的交换次数. 比如给出序列:1 2 3 2 1 ,那么最终序列应该是 1 1 2 2 3 ,最小 ...

  3. codeforces 11D(状压dp)

    传送门:https://codeforces.com/problemset/problem/11/D 题意: 求n个点m条边的图里面环的个数 题解: 点的范围只有19,很容易想到是状压. dp[sta ...

  4. Codeforces Gym 100015F Fighting for Triangles 状压DP

    Fighting for Triangles 题目连接: http://codeforces.com/gym/100015/attachments Description Andy and Ralph ...

  5. Codeforces Gym 100610 Problem K. Kitchen Robot 状压DP

    Problem K. Kitchen Robot Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/10061 ...

  6. 状压dp Codeforces Beta Round #8 C

    http://codeforces.com/contest/8/problem/C 题目大意:给你一个坐标系,给你一个人的目前的坐标(该坐标也是垃圾桶的坐标),再给你n个垃圾的坐标,这个人要捡完所有的 ...

  7. Educational Codeforces Round 13 E. Another Sith Tournament 状压dp

    E. Another Sith Tournament 题目连接: http://www.codeforces.com/contest/678/problem/E Description The rul ...

  8. Codeforces Round #321 (Div. 2) D. Kefa and Dishes(状压dp)

    http://codeforces.com/contest/580/problem/D 题意: 有个人去餐厅吃饭,现在有n个菜,但是他只需要m个菜,每个菜只吃一份,每份菜都有一个欢乐值.除此之外,还有 ...

  9. Codeforces Beta Round #8 C. Looking for Order 状压dp

    题目链接: http://codeforces.com/problemset/problem/8/C C. Looking for Order time limit per test:4 second ...

随机推荐

  1. jquery插件-表单提交插件-jQuery.Form

    1.介绍 JQuery Form插件是一款强大的Ajax表单提交插件,可以简单方便的实现让我们的表单 由传统的提交方式转换成Ajax无刷新提交! 他提供了两个核心的方法ajaxForm以及ajaxSu ...

  2. CSS 命名管理 之 BEM

    好吧,将 BEM 简单的解释为 “Block-Element-Modifier“, 其实是个不负责任的做法.鬼知道 Block 是什么啊?所以,看了一些似懂非懂的中文解释之后,自己还是得去找些英文来读 ...

  3. jpa findOne()用法

    findOne(Interger id) 如果实体类没有id这个属性的话是会报错的 改别人的代码神烦...

  4. JSP+JavaBean+Servlet实现各类列表分页功能

    需求: 每页列表下都有一个分页的功能,显示总数量.当前页/总页数.首页.上一页.下一页.最后一页.GO到第几页 效果动态图: 实现思路: 因为每个列表页都需要,在每个出列表页数据的servlet中都要 ...

  5. 【Beta】Daily Scrum 第二天

    [目录] 1.任务安排 2.Burndown Chart 3.代码check-in 4.困难及总结 1.任务安排 学号尾数 昨天做的任务 今天做的任务 明天要做的任务 612 添加计时界面返回按键事件 ...

  6. ejb 远程调用

    1,客户端代码: package com.example.test; import java.util.Hashtable; import java.util.Properties; import j ...

  7. MongoDB安装部署(一)

    前言 MongoDB是一个由C++语言编写的基于分布式文件存储的数据库,是当前NoSQL数据库中比较热门的一种,旨在为Web应用提供可扩展的高性能数据存储解决方案. MongoDB 简介 MongoD ...

  8. lunix的查看Tomcat目录下日志的快速操作

    可以使用cd命令,cd命令的功能是切换到指定的目录: 命令格式:cd [目录名] 有几个符号作为目录名有特殊的含义: "/"代表根目录. ".."代表上一级目录 ...

  9. try throw catch

    #include "stdafx.h" #include <iostream> #include <stdlib.h> using namespace st ...

  10. sqlserver插入时发生在“xxx”处关键发生错误

    今天知道了一个小技巧,当你的数据库表名为user时会sqlserver的表发生冲突,所以因该将user这样用[user],ok 一切搞定 .