check whether the subset(no need to be consective) and be sum of X

#include "stdafx.h"

bool isSubsetSum(int set[], int n, int sum)
{
	bool sumOfSubSet[100][100];

	for (int i=0; i<100; i++)
	{
		for (int j=0; j<100; j++)
		{
			sumOfSubSet[i][j] = false;
		}
	}

	/*
	*   F[i][j]  ±ì ? ¥”1-i÷–—°?°μ? ?÷–£¨∫??? j μ? ?∑ò¥ê‘?
	*   true ±ì ?¥ê‘? false ±ì ?≤a¥ê‘?
	*/

	for (int j=0; j<=sum; j++)
		sumOfSubSet[0][j] = false;

	for (int i=0; i<=n; i++)
		sumOfSubSet[i][0] = false;

	sumOfSubSet[0][0] = true;

	for (int i=1; i<=n; i++)
	{
		for (int j=1; j<=sum; j++)
		{
			sumOfSubSet[i][j] = sumOfSubSet[i-1][j];

			if ((j-set[i-1] >= 0) && (sumOfSubSet[i][j-set[i-1]]))
			{
				sumOfSubSet[i][j] = true;
			}
		}
	}

	return sumOfSubSet[n][sum];
}

int _tmain(int argc, _TCHAR* argv[])
{
	int set[] = {3, 34, 4, 12, 5, 2};
	int sum = 13;
	int n = sizeof(set)/sizeof(set[0]);
	if (isSubsetSum(set, n, sum) == true)
		 printf("Found a subset with given sum");
	else
		 printf("No subset with given sum");
	return 0;
}
时间: 2024-10-09 02:01:08

check whether the subset(no need to be consective) and be sum of X的相关文章

Project Euler 106:Special subset sums: meta-testing 特殊的子集和:元检验

Special subset sums: meta-testing Let S(A) represent the sum of elements in set A of size n. We shall call it a special sum set if for any two non-empty disjoint subsets, B and C, the following properties are true: S(B) ≠ S(C); that is, sums of subse

Check if a large number is divisible by 3 or not

1 //检验一个大数是否能3整除 2 //A number is divisible by 3 if sum of its digits is divisible by 3. 3 //we cannot use n % 3 to check if a number is divisible by 3 or not. 4 //Remainder of 10i divided by 3 is 1 So powers of 10 only result in value 1. 5 #include<b

51 nod 1105 第K大的数

1105 第K大的数 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题  收藏  关注 数组A和数组B,里面都有n个整数.数组C共有n^2个整数,分别是A[0] * B[0],A[0] * B[1] ......A[1] * B[0],A[1] * B[1]......A[n - 1] * B[n - 1](数组A同数组B的组合).求数组C中第K大的数. 例如:A:1 2 3,B:2 3 4.A与B组合成的C包括2 3 4 4 6 8 6 9 12共9个数. I

第二节作业

1文件操作角度:C语言将计算机的输入输出设备都看作是文件.例如,键盘文件.屏幕文件等. 你应该还记得,向屏幕输出一个信息,例如经典的"HelloWorld!"是 #include<stdio.h> int main() { printf("HelloWorld! \n"); } 从键盘接收一个字符串然后显示是 #include<stdio.h> int main() { char a[10]; scanf("%s",&am

第三节课作业

1 指针是一个存储计算机内存地址的变量.从指针指向的内存读取数据称作指针的取值.指针可以指向某些具体类型的变量地址,例如int.long和double.指针也可以是void类型.NULL指针和未初始化指针. 根据出现的位置不同,操作符 * 既可以用来声明一个指针变量,也可以用作指针的取值.当用在声明一个变量时,*表示这里声明了一个指针.其它情况用到*表示指针的取值. 链表由一系列不必在内存中相连的结构组成.每一个结构均含有表元素和指向包含该元素后继元的结构指针.我们称之为next指针.最后一个单

酒店入住管理系统

管理系统程序是一个偏长的c语言程序,其中包含的函数公式涉及面很广,令人难以捉摸. 1.顺应时代发展要求 2.技术先进 3.功能强大 4.高度灵活性 5.高度安全性 6.读者自助服务 7.简单易用 #include"stdio.h" #include"stdlib.h" #include"string.h" #include"conio.h" #define PAGE 3 #define MAX 1000 #define N 5

C语言 学生宿舍管理系统

经过上次的飞机游戏制作,使我感觉到C语言程序设计,更加的有趣,也使我对这门课程有了更深的理解和认识.这次我们学习了学习C语言操作文件永久保存数据和基于函数的结构化大型程序的编写方法.这次的学习也比较上次来说显得有些复杂. 这次要做的是一个关于书本的管理系统.可以让我们更加方便的去利用程序查找书本存放的位置和一些基本的信息. 一. C语言文件的操作 1. 文件操作的基本方法: C语言将计算机的输入输出设备都看作是文件.例如,键盘文件.屏幕文件等. 你应该还记得,向屏幕输出一个信息,例如经典的"He

150809112 杨磊 学生管理系统

首先完善显示欢迎页的界面,这个就是printf("-.")函数显示字符串,但是要注意用空格和"\n"位置定位,使得显示界面美观. void pagedis() { printf(" \n\n\n                   **********************************\n"); printf("                   *                                *\n&

学生宿舍管理系统 &nbsp; &nbsp; &nbsp; 150809205

#include"stdio.h" #include"stdlib.h" #include"string.h" #include"conio.h" #define PAGE 3 #define MAX 1000 #define N 5 int k=0; /*结构体类型*/ typedef struct {   int num;/*学号*/ char name[20];/*姓名*/ char sex[5];/*性别*/ int