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 ...
随机推荐
- 【Visual C++】绘图函数BitBlt的使用方法
BitBlt 该函数对指定的源设备环境区域中的像素进行位块(bit_block)转换,以传送到目标设备环境. 原型: BOOL BitBlt( HDC hdcDest, int nXDest, ...
- JavaScript + CSS3 实现的海报画廊特效
原文:JavaScript + CSS3 实现的海报画廊特效 这是慕课网上<CSS3+JS 实现超炫的散列画廊特效>的源代码,我修改了一些 bug 和调优了一些细节,并把学习过程中并不了解 ...
- Mina2 研究总结
一.Mina框架. Mina的框架大概是这么个样子: 底层由Java 的NIO 1.0实现 核心架构应该是这样: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZX ...
- 超声波模块SRF05
//////////////////////////////////////////////////////////////////////////////// // // PIC16F877 ...
- POJ2528 Mayor's posters 【线段树】+【成段更新】+【离散化】
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 39795 Accepted: 11552 ...
- boost库在工作(33)网络服务端之三
在这个例子里,表示服务器与一个客户端的沟通渠道,就是一个连接,封装为类CConnect.它是当服务器接收到一个客户端连接请求之后创建的,主要用来就是管理这个连接的生命周期,以及数据的接收和发送.从生命 ...
- CSU 1506(最小费用最大流)
传送门:Double Shortest Paths 题意:有两个人:给出路径之间第一个人走所需要的费用和第二个人走所需要的费用(在第一个人所需的 费用上再加上第二次的费用):求两个人一共所需要的最小费 ...
- C语言复合字面量的使用
C99添加的特性,复合字面量(composite literal).一旦熟悉并使用,便会体会到简洁强大的表达. 所谓字面量就是固定数值的表示.数值和字符串类型都有字面量的表达.如: // 100, 1 ...
- Windows - Windows的文件名的全路径(Fully Qualified File Name)的最大长度为260字节
例如,你可以做以下实验来验证这个限制值: 在随意文件夹下新建一个文件夹. 在该新建文件夹下创建一个随意文件.使其名字长度不能再输入为止. 把该文件的全路径名copy到Microsoft Word中进行 ...
- VSTO学习笔记(四)从SharePoint 2010中下载文件
原文:VSTO学习笔记(四)从SharePoint 2010中下载文件 上一次我们开发了一个简单的64位COM加载项,虽然功能很简单,但是包括了开发一个64位COM加载项的大部分过程.本次我们来给CO ...