http://acm.hdu.edu.cn/showproblem.php?pid=1709
2010-11-12 22:57
316 查看
/*
此题要注意,每一种重量的砝码只有一个,而且称重量是用天平,这就意味这可以多出一些重量为负数的砝码
*/
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=10001;
int a[202];
int c1[maxn];
int c2[maxn];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i,j,k;
int sum=0;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
a[i+n]=-a[i];
sum+=a[i];
}
for(i=0;i<=sum;i++)
c1[i]=c2[i]=0;
c1[0]=c1[a[1]]=1;
for(i=2;i<=n;i++) //处理正数的砝码
{
for(j=0;j<=a[i];j+=a[i])
for(k=0;k<=sum;k++)
if(j+k<=sum)
c2[j+k]+=c1[k];
for(k=0;k<=sum;k++)
{
c1[k]=c2[k];
c2[k]=0;
}
}
for(i=n+1;i<=2*n;i++) //处理负数的砝码
{
for(j=0;j>=a[i];j+=a[i])
for(k=0;k<=sum;k++)
if(j+k<=sum&&j+k>=0)
c2[j+k]+=c1[k];
for(k=0;k<=sum;k++)
{
c1[k]=c2[k];
c2[k]=0;
}
}
int count=0;
for(i=1;i<=sum;i++)
if(!c1[i])
c2[count++]=i;
printf("%d/n",count);
i=0;
while(i<count-1)
printf("%d ",c2[i++]);
if(count!=0)
printf("%d/n",c2[count-1]);
}
return 0;
}
此题要注意,每一种重量的砝码只有一个,而且称重量是用天平,这就意味这可以多出一些重量为负数的砝码
*/
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=10001;
int a[202];
int c1[maxn];
int c2[maxn];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int i,j,k;
int sum=0;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
a[i+n]=-a[i];
sum+=a[i];
}
for(i=0;i<=sum;i++)
c1[i]=c2[i]=0;
c1[0]=c1[a[1]]=1;
for(i=2;i<=n;i++) //处理正数的砝码
{
for(j=0;j<=a[i];j+=a[i])
for(k=0;k<=sum;k++)
if(j+k<=sum)
c2[j+k]+=c1[k];
for(k=0;k<=sum;k++)
{
c1[k]=c2[k];
c2[k]=0;
}
}
for(i=n+1;i<=2*n;i++) //处理负数的砝码
{
for(j=0;j>=a[i];j+=a[i])
for(k=0;k<=sum;k++)
if(j+k<=sum&&j+k>=0)
c2[j+k]+=c1[k];
for(k=0;k<=sum;k++)
{
c1[k]=c2[k];
c2[k]=0;
}
}
int count=0;
for(i=1;i<=sum;i++)
if(!c1[i])
c2[count++]=i;
printf("%d/n",count);
i=0;
while(i<count-1)
printf("%d ",c2[i++]);
if(count!=0)
printf("%d/n",c2[count-1]);
}
return 0;
}
相关文章推荐
- http://acm.hdu.edu.cn/showproblem.php?pid=1709
- http://acm.hdu.edu.cn/showproblem.php?pid=1754 更新节点,区间最值
- http://acm.hdu.edu.cn/webcontest/contest_showproblem.php?pid=1004&ojid=1&cid=6866&hide=1&problem=Pro
- To The Max &&http://acm.hdu.edu.cn/showproblem.php?pid=1081
- http://acm.hdu.edu.cn/showproblem.php?pid=3450 线段树 + dp
- http://acm.hdu.edu.cn/showproblem.php?pid=1823 二维线段树
- http://acm.hdu.edu.cn/showproblem.php?pid=1272。。。
- http://acm.hdu.edu.cn/showproblem.php?pid=1269
- hdu 1085 http://acm.hdu.edu.cn/showproblem.php?pid=1085
- Happy 2004&&http://acm.hdu.edu.cn/showproblem.php?pid=1452
- http://acm.hdu.edu.cn/showproblem.php?pid=1787 典型 欧拉函数(为何c++ 那样会RE)
- http://acm.hdu.edu.cn/showproblem.php?pid=1166 更新节点,区间求和
- 换角度思考:http://acm.hdu.edu.cn/showproblem.php?pid=3602
- http://acm.hdu.edu.cn/showproblem.php?pid=2227 dp + 线段树
- http://acm.hdu.edu.cn/showproblem.php?pid=2642 二维线段树
- find the safest road&&http://acm.hdu.edu.cn/showproblem.php?pid=1596
- 找新朋友(http://acm.hdu.edu.cn/showproblem.php?pid=1286)
- http://acm.hdu.edu.cn/showproblem.php?pid=1505
- http://acm.hdu.edu.cn/showproblem.php?pid=1020..
- http://acm.hdu.edu.cn/showproblem.php?pid=1863