给我们n个硬币

每个硬币都有它的面值,要我我们分为两堆硬币,使得硬币的差值最小

我们可以dp计算出所有的差值,然后从小到大枚举差值,如果差值存在,就输出

dp[i][j] 表示对于前i件物品能达到差值j

状态转移方程为 if(dp[i-1][j]==1)  dp[i][j] = 1(不选第i个物品),dp[i][abs(j-2*a[i])] = 1(选第i件物品)

 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <iostream>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <math.h>
using namespace std;
#pragma warning(disable:4996)
typedef long long LL;
const int INF = <<;
/* */
const int N = + ;
int a[N];
int dp[N][+];//dp[i][j] 表示对于对于前i个物品,差值为j是否存在, 然后算出所有可能的差值
int main()
{
int t, n, i, j, sum;
scanf("%d", &t);
while (t--)
{
scanf("%d", &n);
sum = ;
for (i = ; i <= n; ++i)
{
scanf("%d", &a[i]);
sum += a[i];
} memset(dp, , sizeof(dp)); dp[][sum] = ;
for (i = ; i <= n; ++i)
{
for (j = ; j <= sum; ++j)
{
if (dp[i - ][j])
{
dp[i][j] = ;
dp[i][abs(j - * a[i])] = ;
}
}
}
for (j = ; j <= sum; ++j)//从小到大枚举差值
if (dp[n][j])
break;
printf("%d\n", j);
}
return ;
}

http://ncc.neuq.edu.cn/oj/problem.php?id=1457

t  数据组数

n k   k表示最多能交换k个数字

n个数字    -100<=数字<=100

n个数字

问我们最多交换k次两堆数字中对应的数字,问我们能达到的最小差值,

我们可以计算出第一堆数据所能达到的所有状态,并记录其交换的次数

dp[i][j] = k 表示对于前i个数字,交换了k次,能达到状态j

 #include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <iostream>
#include <queue>
#include <stack>
#include <vector>
#include <map>
#include <set>
#include <string>
#include <math.h>
using namespace std;
#pragma warning(disable:4996)
typedef long long LL;
const int INF = <<;
/* */
const int N = + ;
int a[N], b[N];
int dp[N][ + ];//dp[i][j] 表示前i件物品,能使得陈船长的好玩度为j
int main()
{
int t, n, k, i, j;
int sum;
scanf("%d", &t);
while (t--)
{
scanf("%d%d", &n, &k);
sum = ;
for (i = ; i <= n; ++i)
{
scanf("%d", &a[i]);
a[i] += ;
sum += a[i];
}
for (i = ; i <= n; ++i)
{
scanf("%d", &b[i]);
b[i] += ;
sum += b[i];
} for (i = ; i <= n; ++i)
for (j = ; j <= sum; ++j)
dp[i][j] = INF;
dp[][a[]] = ;
dp[][b[]] = ;
for (i = ; i <= n; ++i)
{
for (j = ; j <= sum; ++j)//算出第一堆数字总和达到j需要的交换次数
{
if (j >= a[i])//不交换第i个数字, j-a[i]为上一层所能达到的总和
dp[i][j] = min(dp[i][j], dp[i-][j - a[i]]);
if (j >= b[i])//交换第i个数字,j-b[i]为上一层所能达到的总和
dp[i][j] = min(dp[i][j], dp[i-][j - b[i]] + );
}
}
int ans = INF;
for (i = ; i <= sum; ++i)
{
if (dp[n][i] <= k)
ans = min(ans, abs(sum - * i));
}
printf("%d\n", ans);
}
return ;
}

Uva562(dp)的更多相关文章

  1. UVA-562 Dividing coins---01背包+平分钱币

    题目链接: https://vjudge.net/problem/UVA-562 题目大意: 给定n个硬币,要求将这些硬币平分以使两个人获得的钱尽量多,求两个人分到的钱最小差值 思路: 它所给出的n个 ...

  2. dp之背包总结篇

    //新手DP学习中 = =!! 前言:背包问题在dp中可以说是经典,作为一个acmer,到现在才正式学习dp,可以说是比较失败的.我个人比较认同一点,想要做一个比较成功的acmer,dp.搜索.数学必 ...

  3. 简单Dp----最长公共子序列,DAG最长路,简单区间DP等

    /* uva 111 * 题意: * 顺序有变化的最长公共子序列: * 模板: */ #include<iostream> #include<cstdio> #include& ...

  4. BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]

    1911: [Apio2010]特别行动队 Time Limit: 4 Sec  Memory Limit: 64 MBSubmit: 4142  Solved: 1964[Submit][Statu ...

  5. 2013 Asia Changsha Regional Contest---Josephina and RPG(DP)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4800 Problem Description A role-playing game (RPG and ...

  6. AEAI DP V3.7.0 发布,开源综合应用开发平台

    1  升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...

  7. AEAI DP V3.6.0 升级说明,开源综合应用开发平台

    AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...

  8. BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]

    1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4026  Solved: 1473[Submit] ...

  9. [斜率优化DP]【学习笔记】【更新中】

    参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...

随机推荐

  1. ocx控件避免弹出警告的类--2

    本文与 OCX控件避免弹出安全警告的类 http://www.cnblogs.com/lidabo/archive/2013/03/26/2981852.html 有些类似,只不过增加了几行代码(红色 ...

  2. Error: 17053 LogWriter: Operating system error 21(The device is not ready.)

    今天在Detach数据库的时候出现错误,运行DBCC CHECKDB从SQL Server error log中看到下面的信息: Error: 17053, Severity: 16, State: ...

  3. HW Video Acceleration in Chrome/Chromium HTML5 video 视频播放硬件加速

    Introduction Video decode (e.g. YouTube playback) and encode (e.g. video chat applications) are some ...

  4. 用Swift开发二维码扫描器教程

    (原文:Building a QR Code Reader in Swift 作者:Simon Ng 译者:xiaoying )我相信大多数人都知道二维码(QR code)是什么,如果你对这个概念还不 ...

  5. xcode5下一个ffmpeg静态库配置

    1.若要安装xcode命令行工具 1).xcode5安装命令行工具方法: 在终端运行命令Using xcode-select --install 2).xcode5之前安装命令行工具方法: 2.xco ...

  6. MongoDB查询命令具体解释

    1.查询全部记录 复制代码代码例如以下: db.userInfo.find(); 相当于:select* from userInfo; 默认每页显示20条记录,当显示不下的情况下,能够用it迭代命令查 ...

  7. 怎样处理iOS 5与iOS 6的 low-memory

    移动设备终端的内存极为有限,应用程序必须做好low-memory处理工作,才能避免程序因内存使用过大而崩溃. low-memory 处理思路 通常一个应用程序会包含多个view controllers ...

  8. 分类器是如何做检测的?——CascadeClassifier中的detectMultiScale函数解读

    原地址:http://blog.csdn.net/delltdk/article/details/9186875 在进入detectMultiScal函数之前,首先需要对CascadeClassifi ...

  9. c#中的jQuery——HtmlAgilityPack

    原文:c#中的jQuery--HtmlAgilityPack c#中是否有javascript中的jQuery类库? jQuery在访问和操作HTML 的DOM的便捷是前端开发工程师的一种福音,在c# ...

  10. Conexant声卡实现内录功能(win7)

    Conexant声卡本身没有立体声混音设备可选,所以我们采用virtual audio device,实现内录功能. [1]下载virtual audio device.下载地址:http://dow ...