博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1021 :[SHOI2008]Debt 循环的债务 (DP)
阅读量:4554 次
发布时间:2019-06-08

本文共 1609 字,大约阅读时间需要 5 分钟。

真是蒟蒻,已经连续几题沦落到不看题解写不出的地步了,最近不太想写题了,学习新的算法吧

用f[i][j][k]表示算到第i种钱,乙有j元,丙有k元的最小方案数,记录可以转移的方案以及去掉不可以转移的方案就行了

CODE:

#include<cstdio>

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int f[7][1010][1010],t[4][7],sum[4];
int a[7]={0,1,5,10,20,50,100};
int x[4];
int c[4];
struct node{
 int x,y;
}q[101000],k[101000];
bool b[7][1010][1010];
int check(int x,int y,int z,int ans){
 if (b[x][y][z]) {
  f[x][y][z]=min(f[x][y][z],ans);
  return 0;
 }else {
  b[x][y][z]=1;
  f[x][y][z]=ans; 
 }
 if (x==6) return 0;
 if (x!=3){
  if (abs(sum[2]-y)%a[x+1]!=0) return 0;
  if (abs(sum[3]-z)%a[x+1]!=0) return 0;
  if (abs(sum[2]+sum[3]-y-z)%a[x+1]!=0) return 0;
 }
 k[0].x++;k[k[0].x]=(node){y,z};
 return 0;
}
int solve(int i,int j,int x,int y,int z){
 for (int k=0;k<=t[y][i];k++)
  for (int l=0;l<=t[z][i];l++) {
   c[x]=k+l;c[y]=-k;c[z]=-l;
   check(i,q[j].x+c[2]*a[i],q[j].y+c[3]*a[i],f[i-1][q[j].x][q[j].y]+k+l);
  }
 for (int k=0;k<=t[x][i];k++)
  for (int l=0;l+k<=t[x][i];l++){ 
   c[x]=-(k+l);c[y]=k;c[z]=l;
   check(i,q[j].x+c[2]*a[i],q[j].y+c[3]*a[i],f[i-1][q[j].x][q[j].y]+k+l);
  }
 return 0;
}
int main(){
 scanf("%d%d%d",&x[1],&x[2],&x[3]);
 for (int i=1;i<=3;i++)
 for (int j=1;j<=6;j++) {
  scanf("%d",&t[i][6-j+1]);
  sum[i]+=t[i][6-j+1]*a[6-j+1];
 }
 q[0].x=1;
 q[1]=(node){sum[2],sum[3]};
 sum[2]+=x[1]-x[2];
 sum[1]+=x[3]-x[1];
 sum[3]+=x[2]-x[3];
 for (int i=1;i<=6;i++){
  k[0].x=0;
  for (int j=1;j<=q[0].x;j++) {
   solve(i,j,1,2,3);
   solve(i,j,2,1,3);
   solve(i,j,3,1,2);   
  }
  swap(k,q);
 }
 if (b[6][sum[2]][sum[3]]) printf("%d",f[6][sum[2]][sum[3]]);
 else printf("impossible");
 return 0;
}

转载于:https://www.cnblogs.com/New-Godess/p/4348934.html

你可能感兴趣的文章
LeetCode Maximum Subarray
查看>>
让我们再聊聊浏览器资源加载优化
查看>>
underscore demo
查看>>
CSS hack
查看>>
C# Enum Name String Description之间的相互转换
查看>>
Android 实现ripple动画
查看>>
PHP wamp server问题
查看>>
Spring Data Redis学习
查看>>
js闭包理解案例-解决for循环为元素注册事件的问题
查看>>
2015.04.23,外语,读书笔记-《Word Power Made Easy》 12 “如何奉承朋友” SESSION 33
查看>>
Spring+SpringMVC+JDBC实现登录
查看>>
生与死之间
查看>>
NEFU 109
查看>>
HDU 5435
查看>>
git从已有分支拉新分支开发
查看>>
滚动条隐藏兼容写法
查看>>
SQL2005查询所有表的大小
查看>>
Shell 正则表达式
查看>>
Docker run命令参数整理
查看>>
qt-opencv配置mingw编译器
查看>>