`

UVA Coin Change(674)

 
阅读更多

题目大意:

      将一对硬币分成两份,使得两份的总金额差最小。比如有三枚硬币,价值分别为2,3和5,则分成的两堆就是2,3一堆和 5一堆,它们的总金额差为0。

 

思路:

      属于动态规划问题,刚开始看,想到了最大连续子序列和的问题,但又有点不一样。后来发现得用0-1背包来解决。定义一个数组dp[Max], Max要大一些,表示提供的硬币所能组成的所有和,dp[i]=1表示提供的硬币能够凑成 i , dp[i]=0表示凑不成 i , 这样从sum/2往下找,找到最大的,就是这些硬币所能凑成的总和最接近于sum/2的。

 

代码如下:

#include <iostream>
#include <vector>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
	freopen( "test.txt", "r", stdin );

	int n, m, sum = 0, value, finalsum;
	vector<int> v;
	int T = 0;
	cin>>T;
	while( T-- )
	{
		cin>>m;
		for( int i = 0; i < m; i++ )
		{
			cin>>value;
			v.push_back(value);
			sum += value;
		}
		
		vector<int> dp(555555);
		dp[0] = 1;  

		for( int i = 0; i < m; i++ )
		{
			for( int j = sum; j>=v[i]; j-- )
			{
				if( dp[j - v[i]] )    //若v[i]=2,则当j=2时,dp[0]=1,说明2能够由一个价值为2的硬币凑成。
					dp[j] = 1;
			}
		}
		int tag = 0;
		for( int i = sum/2; i >= 0; i-- )
		{
			if( dp[i] )
			{
				tag = i;
				break;
			}
		}
		cout<<sum-2*tag<<endl;

		sum = 0;
		v.clear();
	}

	return 0;
}

 

分享到:
评论

相关推荐

    CoinChange.java

    CoinChange.java

    p1-Coin-Change.rar_Change_coin change

    在计算机科学领域,"Coin Change"问题是一个经典的问题,它涉及到计算在给定一组不同面值的硬币时,组成特定总金额的最少硬币数量。这个问题源自实际生活中的找零场景,但它的理论意义远超其应用场景。在本篇讨论中...

    UVa Online Judge部分题目代码

    UVa Online Judge是一个著名的在线编程竞赛平台,它提供了大量的算法问题供程序员们挑战,以提升他们的编程技巧和算法理解能力。这个压缩包包含了在UVa平台上部分题目的解答,是学习和参考的好资源。让我们详细了解...

    coin_change_problem

    ### 动态规划解决找零问题 #### 一、引言 找零问题是计算机科学中的一个经典问题,尤其是在算法设计领域。这个问题的核心是如何利用最少数量的硬币来组成某个特定金额。例如,如果需要找零12元,而手头有的硬币面额...

    c语言-leetcode题解之0322-coin-change

    c c语言_leetcode题解之0322_coin_change

    Coin3D,Coin-3.1.3版,OpenGL封装类库

    Coin3D是一个开源的3D图形库,主要目标是为应用程序开发者提供一个高效且易于使用的接口,以便在OpenGL上构建三维应用。Coin3D基于OpenInventor标准,这是一个广泛认可的3D建模和可视化工具包。Coin-3.1.3是该库的一...

    Coin3D三维可视化开发包

    《Coin3D三维可视化开发包详解》 Coin3D,作为一个强大的开源三维可视化库,为开发者提供了丰富的工具和接口,用于构建复杂的3D图形应用程序。它基于Open Inventor标准,这是一个由Silicon Graphics公司创建的高级...

    Coin3DWinForm bin

    Coin3DWinForm bin 是一个与.NET框架相关的库,它为Windows Forms应用程序提供了与Coin3D交互的能力。Coin3D是一个开源的三维图形库,基于Open Inventor标准,用于构建高性能的可视化应用。这个压缩包包含的是Coin3D...

    LeetCode-Coin-Change

    《LeetCode-Coin-Change:探索Java解题策略》 在编程的世界里,LeetCode是一个深受程序员喜爱的在线平台,它提供了丰富的算法题目用于提升编程技能。本篇将聚焦于LeetCode上的“Coin Change”问题,这是一个经典的...

    coin3D-3.1.3-SoQt-SoWin-VC10.7z )

    Coin3D是一个开源的三维图形库,主要用于构建交互式的3D应用程序。这个“coin3D-3.1.3-SoQt-SoWin-VC10.7z”压缩包包含的是Coin3D的3.1.3版本,适配于Qt和Windows平台,且是用Visual Studio 2010 (VC10) 编译的...

    Coin3D库文件

    Windows下编译利用openInventor进行可视化Geant4所需的Coin3D库文件(含coin-3.1.3和sowin-1.5.0)。原版本使用VS2010编译,经验证,VS2012也可以用,与Geant4版本无关。新版本修改如下: 1、修改了Coin3D\include\...

    Coin3D-Qt.PDF

    《Coin3D-Qt.PDF》是一份详细探讨Coin3D与Qt集成的文档,它主要阐述了如何在Qt应用程序中利用Coin3D库来创建3D图形界面。Coin3D是一个开源的3D图形库,它实现了OpenInventor API,而Qt则是一个广泛使用的C++图形用户...

    Coin3D Documentation 参考手册

    《Coin3D文档参考手册》是一份详尽的资源,为开发者提供了全面了解Coin3D框架的途径。Coin3D是一个开源的三维图形库,基于Open Inventor标准,旨在为科学可视化、医疗图像处理、教育以及游戏开发等领域提供强大的3D...

    coin3d VS2010编译结果

    《Coin3D在VS2010环境下的编译与应用》 Coin3D是一个开源的3D图形库,主要用于创建交互式三维图形应用程序。它基于SOLID(Simple Open Inventor Descendant)的设计,旨在提供一个高效且易于使用的接口,用于开发...

    编译好的Coin3d资料

    Coin3D是一个开源的3D图形库,它基于Open Inventor标准,主要用于创建交互式的3D应用程序。这个“编译好的Coin3d资料”压缩包是官方提供的,包含了解压后的源码、编译好的库文件以及可能的示例程序,方便用户在自己...

    Coin-slider-master

    "Coin-slider-master" 是一个可能与网页开发相关的项目,标题和描述都反映了这一点。这个项目的重点可能是实现一种基于Coin Slider的交互式元素,这通常是一种动态展示图片或内容的滑动展示组件,常用于网站的轮播图...

    Open Inventor环境Coin3D

    Open Inventor和Coin3D是两个紧密相关的图形库,用于构建高级三维图形应用程序,尤其是在科学可视化和工程领域。Open Inventor是由SGI公司开发的一种高级交互式3D图形API(应用程序编程接口),而Coin3D则是一个开源...

    在MFC框架中使用Coin3D

    在MFC(Microsoft Foundation Classes)框架中集成Coin3D,是一项技术挑战,但也是扩展MFC应用程序3D图形能力的有效途径。Coin3D是一个开源的3D图形库,基于Open Inventor标准,提供了丰富的交互式3D场景构建工具。...

Global site tag (gtag.js) - Google Analytics