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

#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. JavaScript 参考手册

    http://www.w3school.com.cn/jsref/index.asp https://developer.mozilla.org/zh-CN/docs/Web/JavaScript

  2. mvc中的webapi

    MVC中 webapi的使用 和 在其他网站中如何来调用(MVC) 1.webapi的路由规则注册在App_Start\WebApiConfig.cs文件中 2.webapi控制器继承父类 apiCo ...

  3. vs2010打包winform程序详解

    vs2010打包winform程序详解   最近一直在做winform程序,做完后程序打包很头疼,第三方打包工具,好用的花钱,不花钱的不好用,最后只能用vs自带的打包工具了! 打包过程vs2010(包 ...

  4. Eclipse插件checkstyle 代码风格的检查

    插件checkstyle 的安装 方法一:  1.Eclipse中,选择Help->Software Updates->Find and Install  2.选择 Search for ...

  5. 第三十二篇、iOS 10开发

    1.语音识别 苹果官方在文档中新增了API   Speech,那么在以前我们处理语音识别非常的繁琐甚至很多时候可能需要借助于第三方框架处理,那么苹果推出了这个后,我们以后处理起来就非常的方便了,spe ...

  6. Hadoop示例程序WordCount编译运行

    首先确保Hadoop已正确安装及运行. 将WordCount.java拷贝出来 $ cp ./src/examples/org/apache/hadoop/examples/WordCount.jav ...

  7. css3选择器一

    在HTML中,通过各种各样的属性可以给元素增加很多附加的信息,了解和掌握css3一些的选择器,是很有必要的. 属性选择器示例: <div><a href="xxx.pdf& ...

  8. Mongodb DB shell数据操作

    shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是用JavaScript脚本完成操作的. Ø 数据库 1.Help查看命令提示 help db.help(); db.yo ...

  9. php curl基本操作

    如何使用cURL的基本方法?首先,修改php.ini文件的设置,找到php_curl.dll,取消下在的注释extension=php_curl.dll,因为php默认是不开启cURL的. cURL是 ...

  10. python del函数

    del用于list列表及字典操作,删除一个或者连续几个元素也可以删除字典指定的key   示例程序如下: >>> a = [-1, 3, 'aa', 85] # 定义一个list&g ...