正题

题目链接:https://www.luogu.com.cn/problem/P4026


题目大意

333个人,有一些面值为100,50,20,10,5,1100,50,20,10,5,1100,50,20,10,5,1的钱,一些人欠一些人钱,求最少交换多少张钞票可以还清。


解题思路

我们设fi,j,kf_{i,j,k}fi,j,k​表示考虑到第iii种面值,第一个人有jjj元第二个人有kkk元时的最小交换次数。

然后dpdpdp即可。


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=7,val[7]={0,100,50,20,10,5,1},inf=2147483647/3;
int sum,a[N][N],cnt[N],s[N],f[N][1100][1100],ans;
int main()
{int x1,x2,x3;scanf("%d%d%d",&x1,&x2,&x3);for(int i=1;i<=3;i++)for(int j=1;j<=6;j++){scanf("%d",&a[i][j]);s[i]+=a[i][j]*val[j];sum+=a[i][j]*val[j];cnt[j]+=a[i][j];}memset(f,0x3f,sizeof(f));f[0][s[1]][s[2]]=0;for(int i=1;i<=6;i++)for(int j=0;j<=sum;j++)for(int k=0;k+j<=sum;k++){if(f[i-1][j][k]>=inf)continue;for(int x1=0;x1<=cnt[i];x1++)for(int x2=0;x1+x2<=cnt[i];x2++){int now1=j-(a[1][i]-x1)*val[i];int now2=k-(a[2][i]-x2)*val[i];int x3=cnt[i]-x1-x2;if(now1>=0&&now2>=0&&now1+now2<=sum)f[i][now1][now2]=min(f[i][now1][now2],f[i-1][j][k]+(abs(x1-a[1][i])+abs(x2-a[2][i])+abs(x3-a[3][i]))/2);}}int X1=s[1]+x3-x1,X2=s[2]+x1-x2,X3=s[3]+x2-x3;ans=inf+10;for(int i=0;i<=6;i++)ans=min(ans,f[i][X1][X2]);if(X1<0||X2<0||X3<0||ans>inf)return printf("impossible")&0;printf("%d",ans);return 0;
}

P4026-[SHOI2008]循环的债务【dp】相关推荐

  1. 洛谷 P4026 [SHOI2008]循环的债务

    水水的dp 设f[i][a][b]表示交换完前i种面值的钞票,第一个人有a元,第二个人有b元的最小代价 直接转移就行了 需要注意的是算的式子 第1个人\(\Delta A\),第二个人\(\Delta ...

  2. BZOJ1021 [SHOI2008]循环的债务

    Description Alice.Bob和Cynthia总是为他们之间混乱的债务而烦恼,终于有一天,他们决定坐下来一起解决这个问题. 不过,鉴别钞票的真伪是一件很麻烦的事情,于是他们决定要在清还债务 ...

  3. BZOJ 1019: [SHOI2008]汉诺塔( dp )

    dp(x, y)表示第x根柱子上y个盘子移开后到哪根柱子以及花费步数..然后根据汉诺塔原理去转移... ------------------------------------------------ ...

  4. BZOJ.1023.[SHOI2008]cactus仙人掌图(DP)

    题目链接 类似求树的直径,可以用(类似)树形DP求每个点其子树(在仙人掌上就是诱导子图)最长链.次长链,用每个点子节点不同子树的 max{最长链}+max{次长链} 更新答案.(不需要存次长链,求解过 ...

  5. 【ZOJ - 3329】One Person Game(带循环的概率dp,数学期望,高斯消元,数学)

    题干: There is a very simple and interesting one-person game. You have 3 dice, namely Die1, Die2 and D ...

  6. hihocoder 1320 压缩字符串(字符串+dp)

    题解: 其实就是对应三种dp的转移方式 1.拼接类型 dp[i][j] = dp[i][c] + dp[c][j] 2.不变类型 dp[i][j] = j-i+1 3.重复类型(必须满足有k个循环节) ...

  7. POJ - 3252 Round Numbers(数位dp)

    题目链接:点击查看 题目大意:规定一个数如果二进制中0的个数大于等于1的个数,则这个数称为"整数",问闭区间a,b中有多少个整数 题目分析:数位dp,dp[pos][c0][c1] ...

  8. 洛谷P2014【树形dp】

    P2014 选课 时间限制 1.00s 内存限制 125.00MB 题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数 ...

  9. 简单的dp(dp专题)

    题目链接:https://vjudge.net/contest/216347#problem/C Alice gets two sequences A and B. A easy problem co ...

最新文章

  1. 在ubuntu 16.04.5 LTS上使用Python 2.7生成带logo的二维码实战
  2. ZooKeeper 基本介绍
  3. 经典mysql数据库表案例_MySQL数据库的“十宗罪”(附10大经典错误案例)
  4. Oracle索引失效问题
  5. 抓取html的内容,js获取网页选中内容(包含html代码)
  6. java大整数的加减乘除_关于大整数的加减乘除求余运算 java
  7. 自动化Cobbler安装
  8. Intellj Idea 如何设置类头注释和方法注释
  9. 【转】如何调试bash脚本
  10. xxx.dll没有被指定在windows上运行的解决方法
  11. 使用FreeSSL申请免费SSL证书驱动Nginx实现HTTPS访问
  12. 中国移动彩信业务割接
  13. 计算机系统原理实验:模型机(十)ttime部分
  14. 网闸标底--网神G6150-C022
  15. lua入门之环境搭建、第一个demo
  16. PentestBOX教程
  17. 库 家庭组 计算机 网络,Windows 8家庭组网络连接功能详解
  18. 1.3.9 python中进程与线程
  19. P1462 通往奥格瑞玛的道路
  20. 关于鼠标连续点击脚本的分享

热门文章

  1. docker 修改阿里镜像源_Jetson Nano 修改源镜像
  2. wenstorm设置谷歌_WebStorm+Chrome调试Vue步骤
  3. linux系统刷分辨率,Linux下设置其分辨率及刷新率
  4. aop springboot 传入参数_Springboot添加AOP打印请求参数
  5. linux oracle流复制,oracle 流复制
  6. java并发之CAS
  7. Java用TCP手写聊天室 可以 私聊版加群聊版
  8. 『软件工程3』你应该知道的三种原型实现模型:抛弃式、演化式、增量式
  9. [蓝桥杯2018决赛]最大乘积-dfs
  10. 合并k个有序链表 python_leetcode第23题-合并K个有序链表