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

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

考虑 $dp$,设 $f[i][j][k]$ 表示考虑了前 $i$ 种面值的钱,$Alice$ 现在有共 $j$ 元,$Bob$ 现在共有 $k$ 元时,的最少交换次数

那么 $Cynthia$ 的状态可以由总和减去 $Alice$ 和 $Bob$ 的状态得到

然后枚举每一种钱,枚举初末此种钱的张数,然后就可以转移,因为有很多状态是不合法的所以复杂度能过

枚举钱从大到小枚举可以使得不合法状态比较多

#include
#include
#include
#include
#include
using namespace std;typedef long long ll;inline int read(){ int x=0,f=1; char ch=getchar(); while(ch<'0'||ch>'9') { if(ch=='-') f=-1; ch=getchar(); } while(ch>='0'&&ch<='9') { x=(x<<1)+(x<<3)+(ch^48); ch=getchar(); } return x*f;}const int N=1007,w[7]={
0,100,50,20,10,5,1},INF=1e9+7;int x1,x2,x3,a[9],b[9],c[9],sa,sb,sc,sum,cnt[9];int f[9][N][N];int main(){ x1=read(),x2=read(),x3=read(); for(int i=1;i<=6;i++) a[i]=read(),sa+=a[i]*w[i]; for(int i=1;i<=6;i++) b[i]=read(),sb+=b[i]*w[i]; for(int i=1;i<=6;i++) c[i]=read(),sc+=c[i]*w[i]; for(int i=1;i<=6;i++) cnt[i]=a[i]+b[i]+c[i]; memset(f,0x3f,sizeof(f)); f[1][sa][sb]=0; sum=sa+sb+sc; for(int i=1;i<=6;i++)//枚举第i种钱 for(int j=0;j<=sum;j++)//枚举Alice的状态 for(int k=0;j+k<=sum;k++)//枚举Bob的状态 { if(f[i][j][k]>INF) continue;//判断不合法状态 for(int p=0;p<=cnt[i];p++)//枚举结束后Alice有多少此钞票 for(int q=0;p+q<=cnt[i];q++)//枚举结束后Bob有多少此钞票 { int ta=j+(p-a[i])*w[i],tb=k+(q-b[i])*w[i], tc=sum-sa-sb+(cnt[i]-p-q-c[i])*w[i] //结束后Alice,Bob,Cynthia的总钱数分别为ta,tb,tc if(ta<0||tb<0||tc<0) continue; f[i+1][ta][tb]=min(f[i+1][ta][tb], f[i][j][k]+(abs(p-a[i])+abs(q-b[i])+abs(cnt[i]-p-q-c[i]))/2 ); //记得转移张数是总张数除以2 } } sa-=x1,sb+=x1; sb-=x2,sc+=x2; sc-=x3,sa+=x3; if(sa<0||sb<0||sc<0||f[7][sa][sb]>INF) { printf("impossible\n"); return 0; } printf("%d\n",f[7][sa][sb]); return 0;}

 

转载于:https://www.cnblogs.com/LLTYYC/p/11421794.html

你可能感兴趣的文章
Adobe® Reader®.插件开发
查看>>
【POJ 3461】Oulipo
查看>>
Alpha 冲刺 (5/10)
查看>>
使用Siege进行WEB压力测试
查看>>
斑马为什么有条纹?
查看>>
android多层树形结构列表学习笔记
查看>>
Android_去掉EditText控件周围橙色高亮区域
查看>>
《构建之法》第一、二、十六章阅读笔记
查看>>
arrow:让Python的日期与时间变的更好
查看>>
(转)Excel的 OleDb 连接串的格式(连接Excel 2003-2013)
查看>>
Java并发编程
查看>>
Git Stash用法
查看>>
sql server 2008学习8 sql server存储和索引结构
查看>>
Jquery radio选中
查看>>
postgressql数据库中limit offset使用
查看>>
测试思想-集成测试 关于接口测试 Part 2
查看>>
windows下mysql密码忘了怎么办?【转】
查看>>
php生成器使用总结
查看>>
T-SQL中的indexof函数
查看>>
javascript基础之数组(Array)对象
查看>>