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 ...
随机推荐
- 将单词首字母大写的JS脚本工具
<html> <head> <title>首字母全改为大写JS脚</title> <SCRIPT LANGUAGE="JavaScrip ...
- 移植一个开源点餐网到SAE平台上
记得以前我准备弄个点餐网的,但是由于一些原因没有做下去. 前几天将网上的一个点餐源码移植到了SAE上,网址http://diancan4sae.sinaapp.com. 我想做个外卖网,先选一个学校周 ...
- PHP中抽象类与接口的应用场景
<?php /*** ====笔记部分==== 接口的具体语法: 0:以人类为, class Human 是人的草图 而接口 是零件 可以用多种零件组合出一种新特种来. 1: 如上,接口本身即是 ...
- go iota
package main import ( "fmt" ) const ( a = 'A' b c = iota d ) func main() { fmt.Println(a) ...
- Delphi面向对象设计的经验原则(61条)
(1)所有数据都应该隐藏在所在的类的内部. (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者. (3)尽量减少类的协议中的消息. (4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深 ...
- hnnu 11546 Sum of f(x) (求一个数的全部约数和)
代码: #include<cstdio> #include<cstring> #define N 200000 using namespace std; long long f ...
- robots.txt禁止搜索引擎收录
禁止搜索引擎收录的方法 一.什么是robots.txt文件? 搜索引擎通过一种程序robot(又称spider),自动访问互联网上的网页并获取网页信息. 您可以在您的网站中创建一个纯文 ...
- 移植ffmpeg到VC环境心得
所有想学习ffmpeg的网友有福了,大名鼎鼎的ffmpeg,移植到Windows的VC6版本全部开源,编译环境为VC6+SP5+VCPP5.别忘记了顶贴哦. 移植ffmpeg到windows,主要的修 ...
- hdu 2842 Chinese Rings
点击打开hdu2842 思路: 矩阵快速幂 分析: 1 题目的意思是给定n个环,和一些规则要把所有的环全部拆下最少需要的步数 2 题目规定如果要拆第n个环,那么第n-1个要挂着,n-2环要被拆下.那么 ...
- 飘逸的python - yield简明教程
发现还有非常多人对yield不理解,云里雾里,于是试着用文字表述. 仅仅要函数含有yield语句,它就返回一个生成器.所以我们与其把其看成函数定义,不如看作是生成器定义.函数用return返回,而生成 ...