为啥我觉得这是个DP….f[i][j][k][l]表示四种零件分别用了i,j,k,l个的方案数。然后发现这样不能保证表一定能接在表链首尾,也不知道状态之间如何转移,那么加一维变成f[i][j][k][l][S],S表示首尾的状态(4种),于是就可以预处理了。然后我们需要从给出的一共n个4种零件中选出k个。那么dfs暴力枚举方案。

一开始DP求的状态是i,j,k,l四维都取到1-40,算了一些冗余状态,T了……后来限制四维之和小于等于40,A了……不过慢死…好像别人是直接搜的,加个记忆化?因为真正用到的状态数目不多所以会比较快?

#include<cstdio>
typedef long long ll;
ll f[][][][][];//4:首-尾字母
void dp(){//并不是所有状态都会被用到?
f[][][][][]=f[][][][][]=f[][][][][]=f[][][][][]=;
for(int i=;i<=;++i){
for(int j=;i+j<=;++j){
for(int k=;i+j+k<=;++k){
for(int l=;i+j+k+l<=;++l){
if(i+j+k+l==)continue;
for(int s=;s<;++s){
if(i!=&&(s&)==)f[i][j][k][l][s]+=f[i-][j][k][l][s];
if(j!=&&(s&)==)f[i][j][k][l][s]+=f[i][j-][k][l][s^];
if(k!=&&(s&)==)f[i][j][k][l][s]+=f[i][j][k-][l][s^];
if(l!=&&(s&)==)f[i][j][k][l][s]+=f[i][j][k][l-][s];
}
}
}
}
}
}
int cnt[];
int sol[];
ll ans=;int S;
int n,k;
void dfs(int x,int sum){
if(x==){
if(sum==)ans+=f[sol[]][sol[]][sol[]][sol[]][S];
return;
}
for(int i=;i<=cnt[x]&&i<=sum;++i){
sol[x]=i;
dfs(x+,sum-i);
sol[x]=;
} }
int main(){
dp();
char buf[];
while(scanf("%d%d",&n,&k)!=EOF){
scanf("%s",buf);
S=;
if(buf[]=='V')S+=;
if(buf[]=='V')S+=;
cnt[]=cnt[]=cnt[]=cnt[]=;
for(int i=;i<=n;++i){
scanf("%s",buf);
int tmp=;
if(buf[]=='V')tmp+=;
if(buf[]=='V')tmp+=;
cnt[tmp]++;
}
ans=;
dfs(,k); if(ans==)printf("NO\n");
else printf("YES\n%lld\n",ans);
}
return ;
}

noi-openjudge[4.7搜索]怀表问题的更多相关文章

  1. noi.openjudge 1.13.44

    http://noi.openjudge.cn/ch0113/44/ 总时间限制:  1000ms 内存限制:  65536kB 描述 将 p 进制 n 转换为 q 进制.p 和 q 的取值范围为[2 ...

  2. noi.openjudge 1.13.15

    http://noi.openjudge.cn/ch0113/15/ 总时间限制:  1000ms 内存限制:  65536kB 描述 输入一个长度为N的整数序列 (不多于128个整数),每个整数的范 ...

  3. noi.openjudge 1.12.6

    http://noi.openjudge.cn/ch0112/06/ 总时间限制:  2000ms 内存限制:  65536kB 描述 传说很遥远的藏宝楼顶层藏着诱人的宝藏.小明历尽千辛万苦终于找到传 ...

  4. noi.openjudge 2.6.162 Post Office

    http://noi.openjudge.cn/ch0206/162/ 总时间限制:  1000ms 内存限制:  65536kB 描述 There is a straight highway wit ...

  5. noi.openjudge——8465 马走日

    http://noi.openjudge.cn/ch0205/8465/ 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  1024kB 描述 马在中国象棋以日字形规则移动. 请编写 ...

  6. noi.openjudge——2971 抓住那头牛

    http://noi.openjudge.cn/ch0205/2971/ 总时间限制:  2000ms 内存限制:  65536kB 描述 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫 ...

  7. noi openjudge 1768:最大子矩阵

    链接:http://noi.openjudge.cn/ch0406/1768/ 描述已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如 ...

  8. noi openjudge 6044:鸣人和佐助

    http://noi.openjudge.cn/ch0205/6044/ 描述佐助被大蛇丸诱骗走了,鸣人在多少时间内能追上他呢? 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个 ...

  9. noi题库(noi.openjudge.cn) 1.7编程基础之字符串T31——T35

    T31 字符串P型编码 描述 给定一个完全由数字字符('0','1','2',-,'9')构成的字符串str,请写出str的p型编码串.例如:字符串122344111可被描述为"1个1.2个 ...

  10. noi题库(noi.openjudge.cn) 1.8编程基础之多维数组T11——T20

    T11 图像旋转 描述 输入一个n行m列的黑白图像,将它顺时针旋转90度后输出. 输入 第一行包含两个整数n和m,表示图像包含像素点的行数和列数.1 <= n <= 100,1 <= ...

随机推荐

  1. Linux 通过sendmail 发邮件到外部邮箱

    最近在写自动化巡检脚本,想着怎么预警后自动发送邮件报警. 首先下载最新版本mailx-12.4.tar.bz2 # wget http://sourceforge.net/projects/heirl ...

  2. ORACLE临时表总结

    临时表概念 临时表就是用来暂时保存临时数据(亦或叫中间数据)的一个数据库对象,它和普通表有些类似,然而又有很大区别.它只能存储在临时表空间,而非用户的表空间.ORACLE临时表是会话或事务级别的,只对 ...

  3. Linux rm删除大批量文件

    在使用rm删除大批量文件时,有可能会遭遇"参数列太长"(Argument list too long)的问题.如下所示 [oracle@DB-Server bdump]$ rm - ...

  4. 我心中的MySQL DBA

    原文网址链接:http://wangwei007.blog.51cto.com/68019/1718311 MySQL是一个跨平台的开源关系型数据库管理系统,目前MySQL被广泛地应用在Interne ...

  5. 【转】详细分析Java中断机制

    原文地址:http://www.infoq.com/cn/articles/java-interrupt-mechanism 1. 引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制 ...

  6. ES5 的 setter 和 getter

    有两种方式使用 setter 和 getter 1. set/get var person = { _name: '', get name() { return this._name }, set n ...

  7. netty3升netty4一失眼成千古恨

    老项目是netty3的,本来想直接改到netty5,但是netty5居然是只支持jdk1.7,很奇怪jdk1.6和jdk1.8都不行..为了兼容jdk1.6加上netty4本来和netty5就差别不大 ...

  8. [转]ASP.NET Core 之 Identity 入门(三)

    本文转自:http://www.cnblogs.com/savorboard/p/aspnetcore-identity3.html 前言 在上一篇文章中,我们学习了 CookieAuthentica ...

  9. POJ1703Find them, Catch them[种类并查集]

    Find them, Catch them Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 42416   Accepted: ...

  10. vi快捷键

    /** * eclipse内置快捷: * * * 导入包:Ctrl+Shift+O * Ctrl+T 查看一个类的继承关系树,是自顶向下的,再多按一次Ctrl+T, 会换成自底向上的显示结构. 提示: ...