比较不错的一个题,关键是理解状态转移

#include<algorithm>
#include<cstdio>
#include<cstring>
#include<queue>
#define maxn 55
using namespace std;
int m,ans; int num[maxn],vis[maxn];
bool cnt[];
int scale[]; bool dfs(int cur)
{
// printf("%d %d\n",cur,ans);
if(cur==ans-)
{
for(int i=; i<m-; i++)
if(!vis[i])
return ;
return ;
} for(int i=; i<cur; i++)
{
for(int j=; j<m-; j++)
{
if(vis[j])continue;
int dd=scale[i]+num[j];
vis[j]=;
if(dd<=scale[cur-])continue;
if(dd>=num[m-])continue; scale[cur]=dd; queue<int>q;
while(!q.empty())q.pop(); for(int k=; k<cur; k++)
{
int tmp=dd-scale[k];
if(cnt[tmp]&&!vis[cnt[tmp]])
{
vis[cnt[tmp]]=;
q.push(cnt[tmp]);
}
} int tmp=num[m-]-scale[cur];
if(cnt[tmp]&&!vis[cnt[tmp]])
{
vis[cnt[tmp]]=;
q.push(cnt[tmp]);
} if(dfs(cur+))return ;
while(!q.empty())
{
vis[q.front()]=;
q.pop();
}
}
}
return ;
} int main()
{
int n,ca=;
while(scanf("%d",&n)&&n)
{
for(int i=; i<n; i++)
scanf("%d",&num[i]);
sort(num,num+n);
m=unique(num,num+n)-num; ans=;
while(ans*(ans-)/<m)
ans++;
memset(cnt,,sizeof cnt);
memset(vis,,sizeof vis);
for(int i=; i<m; i++)
cnt[num[i]]=i; scale[]=;
while(!dfs())
ans++;
scale[ans-]=num[m-];
printf("Case %d:\n",ca++);
printf("%d\n",ans); for(int i=;i<ans;i++)
printf("%d ",scale[i]);
puts("");
}
return ;
}

uva 1377的更多相关文章

  1. uva 1354 Mobile Computing ——yhx

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABGcAAANuCAYAAAC7f2QuAAAgAElEQVR4nOy9XUhjWbo3vu72RRgkF5

  2. UVA 10564 Paths through the Hourglass[DP 打印]

    UVA - 10564 Paths through the Hourglass 题意: 要求从第一层走到最下面一层,只能往左下或右下走 问有多少条路径之和刚好等于S? 如果有的话,输出字典序最小的路径 ...

  3. UVA 11404 Palindromic Subsequence[DP LCS 打印]

    UVA - 11404 Palindromic Subsequence 题意:一个字符串,删去0个或多个字符,输出字典序最小且最长的回文字符串 不要求路径区间DP都可以做 然而要字典序最小 倒过来求L ...

  4. UVA&&POJ离散概率与数学期望入门练习[4]

    POJ3869 Headshot 题意:给出左轮手枪的子弹序列,打了一枪没子弹,要使下一枪也没子弹概率最大应该rotate还是shoot 条件概率,|00|/(|00|+|01|)和|0|/n谁大的问 ...

  5. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

  6. UVA数学入门训练Round1[6]

    UVA - 11388 GCD LCM 题意:输入g和l,找到a和b,gcd(a,b)=g,lacm(a,b)=l,a<b且a最小 g不能整除l时无解,否则一定g,l最小 #include &l ...

  7. UVA - 1625 Color Length[序列DP 代价计算技巧]

    UVA - 1625 Color Length   白书 很明显f[i][j]表示第一个取到i第二个取到j的代价 问题在于代价的计算,并不知道每种颜色的开始和结束   和模拟赛那道环形DP很想,计算这 ...

  8. UVA - 10375 Choose and divide[唯一分解定理]

    UVA - 10375 Choose and divide Choose and divide Time Limit: 1000MS   Memory Limit: 65536K Total Subm ...

  9. UVA - 11584 Partitioning by Palindromes[序列DP]

    UVA - 11584 Partitioning by Palindromes We say a sequence of char- acters is a palindrome if it is t ...

随机推荐

  1. ASP.NET中在不同的子域中共享Session

    天遇到了这个问题,于是研究了一下.要解决这个问题,首先就要明白一些Session的机理.Session在服务器是以散列表形式存在的,我们都知道Session是会话级的,每个用户访问都会生成一个Sess ...

  2. 设置win7任务栏显示标题,而不显示缩略图

    win7系统的任务栏可以显示桌面缩略图,这是非常好的一个功能,但是有时候我们希望只显示标题,如下所示 怎样设置呢?只要在桌面上的计算机图标上面“右键”,选择“属性”,在弹出的窗口选择“高级系统设置”, ...

  3. COM 参数有in, out ,retval

    COM 参数有in, out ,retval 来源:http://blog.sina.com.cn/s/blog_472a9f0c01017uer.html In 输入参数,它的值不被返回    Ou ...

  4. 【转】用capability 特征加强Linux系统安全

    用capability 特征加强Linux系统安全 摘要:传统UNIX系统的访问控制模型非常简单——普通用户对超级用户.在这种模型中,一个进程或者帐户要么只有很小的权限,要么具有全部的系统权限.显然, ...

  5. Remote Desktop Organizer远程桌面管理软件的基本使用和介绍

    <Remote Desktop Organizer>是一款用于远程桌面管理的软件.软件支持windows平台运行. Remote Desktop Organizer 是一款 Windows ...

  6. Spring Mvc模式下Jquery Ajax 与后台交互操作

    1.基本代码 1)后台控制器基本代码 @Controller @RequestMapping("/user") public class UserController { @Aut ...

  7. java基础-基础类型包装类型

    想要对基本类型数据进行更多的操作,最方便的方式就是将其封装成对象. 为啥呢?因为在对象描述中就可以定义更多的属性和行为对该基本数据类型进行操作. [八种基本数据类型的包装类] byte --Byte ...

  8. rabbitmq+haproxy+keepalived实现高可用集群搭建

    项目需要搭建rabbitmq的高可用集群,最近在学习搭建过程,在这里记录下可以跟大家一起互相交流(这里只是记录了学习之后自己的搭建过程,许多原理的东西没有细说). 搭建环境 CentOS7 64位 R ...

  9. 最常用的MySQL命令语句

    e良师益友网导读:MySQL数据库是应用最广的数据库之一,在MySQL数据库中有各种各样的命令调用语句,在平常工作中非常实用的命令,对于初学者来说,掌握文中的MySQL命令语句,是非常实用的,下面我们 ...

  10. 隐藏win7盘符

    1.隐藏盘符: //新建注册表,隐藏X盘符 int regeditme() { HKEY hkey; DWORD dwLastError= ;//隐藏X盘2^25 J:2^9=512 X:盘符与挂载的 ...