zoukankan      html  css  js  c++  java
  • hdu 1709

    题意:已知有N个不同的砝码,求这N个不同砝码不能称量的重量

    分析:与一般的母函数类似,只是还要多考虑一步,就是砝码并不定都放一边

    for(int i=1;i<=n;i++)
    {
    for(int j=0;j<=maxn;j++)
    {
    if(j+p[i]<=maxn)
    num1[j+p[i]]+=num[j];
    num1[abs(j-p[i])]+=num[j];//核心部分都加了这么一句
    }
    for(int j=0;j<=maxn;j++)
    num[j]=num1[j];
    }

    #include<iostream>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int num1[10010],num[10010],n;
    int p[110],ans[11000],maxn;
    void solve()
    {
    	memset(num1,0,sizeof(num1));
    	memset(num,0,sizeof(num));
    	num1[0]=num[0]=1;
    	for(int i=1;i<=n;i++)
    	{
    		for(int j=0;j<=maxn;j++)
    		{
    			if(j+p[i]<=maxn)
    			num1[j+p[i]]+=num[j];
    			num1[abs(j-p[i])]+=num[j];
    		}
    		for(int j=0;j<=maxn;j++)
    			num[j]=num1[j];
    	}
    }
    int main()
    {
    	while(scanf("%d",&n)==1)
    	{
    		maxn=0;
    		for(int i=1;i<=n;i++)
    		{
    			scanf("%d",&p[i]);
    			maxn+=p[i];
    		}
    		solve();
    		int c=0;
    		for(int i=1;i<=maxn;i++)
    		{
    			if(num[i]==0)
    				ans[c++]=i;
    		}
    		printf("%d\n",c);
    		if(c!=0)
    		{
    			printf("%d",ans[0]);
    			for(int i=1;i<c;i++)
    				printf(" %d",ans[i]);
    			printf("\n");
    		}
    	}
    	return 0;
    }
    
  • 相关阅读:
    java内存泄露
    hbase java api
    配置CRT远程登录
    kafka分区消费模型
    JAVA内存区域
    JVM分代和垃圾回收
    spring中bean的作用域
    分布式RPC
    session共享
    ZooKeeper实现分布式session
  • 原文地址:https://www.cnblogs.com/nanke/p/2233677.html
Copyright © 2011-2022 走看看