OpenJudge 2755

简介: 2755:神奇的口袋 Time Limit:10000msMemory Limit:65536kBDescription有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。

2755:神奇的口袋

Time Limit:
10000ms
Memory Limit:
65536kB
Description
有一个神奇的口袋,总的容积是40,用这个口袋可以变出一些物品,这些物品的总体积必须是40。John现在有n个想要得到的物品,每个物品的体积分别是a 1,a 2……a n。John可以从这些物品中选择一些,如果选出的物体的总体积是40,那么利用这个神奇的口袋,John就可以得到这些物品。现在的问题是,John有多少种不同的选择物品的方式。
Input
输入的第一行是正整数n (1 <= n <= 20),表示不同的物品的数目。接下来的n行,每行有一个1到40之间的正整数,分别给出a 1,a 2……a n的值。
Output
输出不同的选择物品的方式的数目。
Sample Input
3
20
20
20
//动态规划

#include<stdio.h>
 #include<string.h>
 int main()
 {
     int n,i;
     int num[50],a[30];
     scanf("%d",&n);
     for(i=0;i<n;i++)
         scanf("%d",&a[i]);
     memset(num,0,sizeof(num));
     for(i=0;i<n;i++)
     {
         int k=40-a[i];
         while(k>=0)
         {
             if(num[k]>0)
                 num[k+a[i]]+=num[k];
             k--;
         }
         num[a[i]]++;
     }
     printf("%d\n",num[40]);
     return 0;
 }
//AC,自己写的

#include <iostream>
#include <cstdlib>
#include <cstring> 
using namespace std;
int ch[25];
bool vis[25];
int ans,T;//Èç¹ûÈ«¾ÖÉùÃ÷Ϊcount£¬Ôò×ÜÌáʾundeclared£¬»»Á˾ͺÃÀ²£¬²»¶®£¡ 
void dfs(int cute,int j)
{
    int i,k;
    if(0==cute)
        ans++;
    else
    {
        for(i=j;i<T;i++)
        if(!vis[i])
        {
            vis[i] = true;           
            dfs(cute-ch[i],i+1);
            vis[i] = false;
        }
    }
}                
int main()
{
    int i,j,k;
    cin>>T;
    memset(ch,0,sizeof(ch));
    memset(vis,false,sizeof(vis));
    for(i=0;i<T;i++)
        cin>>ch[i];
    ans = 0;
    dfs(40,0);
    cout<<ans<<endl;
    //system("pause");
    return 0;
}
    

  

  

  

  

目录
相关文章
OpenJudge NOI 1.11 05:派
OpenJudge NOI 1.11 05:派
81 0
|
人工智能 数据安全/隐私保护
openjudge 螺旋加密
/*======================================================================== 25:螺旋加密 总时间限制: 1000ms 内存限制: 65536kB 描述 Chip和Dale发明了一种文本信息加密技术。
1431 0
|
人工智能 定位技术 C语言
openjudge-最好的草
http://noi.openjudge.cn/ch0108/17/ 总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  65536kB 描述 奶牛Bessie计划好好享受柔软的春季新草。
1767 0
openjudge-膨胀的木棍
http://noi.openjudge.cn/ch0111/09/ 总时间限制: 1000ms  内存限制: 65536kB 描述 当长度为L的一根细木棍的温度升高n度,它会膨胀到新的长度L'=(1+n*C)*L,其中C是热膨胀系数。
1175 0
|
人工智能 算法
OpenJudge计算概论-字符串排序
/*====================================================================== 字符串排序 总时间限制: 1000ms 内存限制: 65536kB 描述 参考整数排序方法,设计一种为字符串排序的算法,将字符串从小到大输出 输入 第一行为测试数据组数t, 后面跟着t组数据。
816 0
|
人工智能
OpenJudge计算概论-寻找山顶
/*===================================== 寻找山顶 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个m×n的山地上,已知每个地块的平均高程,请求出所有山顶所在的地块(所谓山顶,就是其地块平均高程不比其上下左右相邻的四个地块每个地块的平均高程小的地方)。
866 0
|
ice
OpenJudge计算概论-文字排版
/*====================================================================== 文字排版 总时间限制: 1000ms 内存限制: 65536kB 描述 给一段英文短文,单词之间以空格分隔(每个单词应包括其前后紧邻的标点符号)。
867 0
OpenJudge计算概论-求平均年龄
/*============================================== 求平均年龄 总时间限制: 1000ms 内存限制: 65536kB 描述 班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数点后两位。
1392 0
OpenJudge计算概论-取石子游戏
OpenJudge计算概论-取石子游戏【函数递归练习】 /*====================================================================== 取石子游戏 总时间限制:  1000ms       内存限制: 65536kB 描述 有两堆石子,两个人轮流去取.
861 0
|
人工智能
OpenJudge计算概论-中位数
/*============================================================== 中位数 总时间限制: 2000ms 内存限制: 65536kB 描述 中位数定义:一组数据按从小到大的顺序依次排列,处在中间位置的一个数或最中间两个数据的平均...
957 0