Uva562(dp)
给我们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)的更多相关文章
- UVA-562 Dividing coins---01背包+平分钱币
题目链接: https://vjudge.net/problem/UVA-562 题目大意: 给定n个硬币,要求将这些硬币平分以使两个人获得的钱尽量多,求两个人分到的钱最小差值 思路: 它所给出的n个 ...
- dp之背包总结篇
//新手DP学习中 = =!! 前言:背包问题在dp中可以说是经典,作为一个acmer,到现在才正式学习dp,可以说是比较失败的.我个人比较认同一点,想要做一个比较成功的acmer,dp.搜索.数学必 ...
- 简单Dp----最长公共子序列,DAG最长路,简单区间DP等
/* uva 111 * 题意: * 顺序有变化的最长公共子序列: * 模板: */ #include<iostream> #include<cstdio> #include& ...
- BZOJ 1911: [Apio2010]特别行动队 [斜率优化DP]
1911: [Apio2010]特别行动队 Time Limit: 4 Sec Memory Limit: 64 MBSubmit: 4142 Solved: 1964[Submit][Statu ...
- 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 ...
- AEAI DP V3.7.0 发布,开源综合应用开发平台
1 升级说明 AEAI DP 3.7版本是AEAI DP一个里程碑版本,基于JDK1.7开发,在本版本中新增支持Rest服务开发机制(默认支持WebService服务开发机制),且支持WS服务.RS ...
- AEAI DP V3.6.0 升级说明,开源综合应用开发平台
AEAI DP综合应用开发平台是一款扩展开发工具,专门用于开发MIS类的Java Web应用,本次发版的AEAI DP_v3.6.0版本为AEAI DP _v3.5.0版本的升级版本,该产品现已开源并 ...
- BZOJ 1597: [Usaco2008 Mar]土地购买 [斜率优化DP]
1597: [Usaco2008 Mar]土地购买 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4026 Solved: 1473[Submit] ...
- [斜率优化DP]【学习笔记】【更新中】
参考资料: 1.元旦集训的课件已经很好了 http://files.cnblogs.com/files/candy99/dp.pdf 2.http://www.cnblogs.com/MashiroS ...
随机推荐
- Android菜鸟的成长笔记(4)——你真的理解了吗?
原文:Android菜鸟的成长笔记(4)--你真的理解了吗? 在上一篇中我们查看了QQ的apk源文件中的布局结构,并仿照QQ完成了我们第一个应用的界面,详细请看<Android菜鸟的成长笔记&g ...
- tbb 线程安全concurrent_queue的性能
tbb实现了线程安全的queue,这样程序员既可以不用和那些lock,mutex,criticalsection打交道,又大大提高性能,太给力了..比较的结果见代码中的注释.结果可以看出代码足足少一半 ...
- [置顶] 强大的JQuery
JQuery初识 为了简化JS的开发,一些JS库诞生了,JQuery就是其中的一个.JQuery是一个兼容多浏览器的Javascript框架.是轻量级的JS库.jQuery为用户提供了丰富的文档说明, ...
- Linux入门基础#2:Linux文件系统基本结构
本文出自 http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...
- Microsoft2013校园招聘笔试题及解答
继续求拍砖!!!! 1. You are managing the database of a book publichser, you currently store the book orders ...
- html中加入超链接方式的汇总
在CSS样式中,对超链接的样式有以下几种定义(1)设置链接未被访问时的样式,具体写法如下:a:link{font-size:10px;... }(2)设置链接在鼠标经过时的样式,具体写法如下:a:ho ...
- [Android学习笔记]Android中多线程开发的一些概念
线程安全: 在多线程的情况下,不会因为线程之间的操作而导致数据错误. 线程同步: 同一个资源,可能在同一时间被多个线程操作,这样会导致数据错误.这是一个现象,也是一个问题,而研究如何解决此类问题的相关 ...
- (一)----使用HttpClient发送HTTP请求(通过get方法获取数据)
(一)----使用HttpClient发送HTTP请求(通过get方法获取数据) 一.HTTP协议初探: HTTP(Hypertext Transfer Protocol)中文 “超文本传输协议”,是 ...
- 浅谈Jquery的使用上篇
一. 1.Jquery是什么?有什么特性? jQuery 是一个 JavaScript 函数库. jQuery 库包含以下特性: HTML 元素选取.HTML 元素操作. CSS 操作 .HTML 事 ...
- win7如何清理图标缓存
rem 关闭Windows外壳程序explorer taskkill /f /im explorer.exe rem 清理系统图标缓存数据库 attrib -h -s -r "%userpr ...