BZOJ 1021 DP
来源:互联网 发布:如何评价雅尼 知乎 编辑:程序博客网 时间:2024/05/22 17:27
dp[i][j][k]表示到了第i种面值,第一个人还有j元钱,第二个人还有k元钱的最少交换张数。
枚举钱的种类和两个人的钱的数目,转移即可。
#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<algorithm>using namespace std;typedef long long LL;int dp[2][1010][1010],cnt[4][10],mcnt[10];int money[]={0,1,5,10,20,50,100};int x1,x2,x3,sum;int has[4];int main(){ scanf("%d%d%d",&x1,&x2,&x3); memset(has,0,sizeof(has)); memset(mcnt,0,sizeof(mcnt)); for(int i=1;i<=3;i++){ for(int j=6;j>=1;j--){ scanf("%d",&cnt[i][j]); mcnt[j]+=cnt[i][j]; has[i]+=cnt[i][j]*money[j]; } } sum=has[1]+has[2]+has[3]; int l1=has[1]-x1+x3,l2=has[2]+x1-x2; if(l1<0||l2<0||sum-l1-l2<0){ printf("impossible\n"); return 0; } memset(dp[0],-1,sizeof(dp[0])); dp[0][has[1]][has[2]]=0; for(int i=1;i<=6;i++){//6种钱 memset(dp[i&1],-1,sizeof(dp[i&1])); for(int j1=0;j1<=sum;j1++){//两个人的钱 for(int j2=0;j1+j2<=sum;j2++){ if(dp[(i-1)&1][j1][j2]!=-1){ for(int k1=0;k1<=mcnt[i];k1++){//这种钱两个人的数目要变成多少 for(int k2=0;k2+k1<=mcnt[i];k2++){ int la=j1+money[i]*(k1-cnt[1][i]); int lb=j2+money[i]*(k2-cnt[2][i]); if(la>=0&&lb>=0&&la+lb<=sum){ int d=(abs(k1-cnt[1][i])+abs(k2-cnt[2][i])+abs(mcnt[i]-k1-k2-cnt[3][i]))/2; if(dp[i&1][la][lb]==-1){ dp[i&1][la][lb]=dp[(i-1)&1][j1][j2]+d; } else { dp[i&1][la][lb]=min(dp[(i-1)&1][j1][j2]+d,dp[i&1][la][lb]); } } } } } } } } if(dp[6&1][l1][l2]==-1){ puts("impossible"); } else { printf("%d\n",dp[6&1][l1][l2]); } return 0;}
0 0
- bzoj 1021 dp
- BZOJ 1021 DP
- 【dp】bzoj 1021 循环的债务
- bzoj 3864 dp套dp
- BZOJ 1087 状压DP
- BZOJ 1207 DP
- BZOJ 2152 (树形DP)
- BZOJ 3791 作业 DP
- BZOJ 4352 预处理 + DP
- bzoj 3037(树形DP)
- bzoj 1003(spfa+dp)
- BZOJ 1003 SPFA + DP
- [DP] BZOJ 4247 挂饰
- bzoj 4027 树形dp
- bzoj 3573(树形DP)
- bzoj 4347 dp
- bzoj 4380 dp
- bzoj 4254 树形dp
- Linux 性能调优,网络开发,系统诊断常用命令总结
- html第五天
- Shader中的Tags
- mysql导入导出数据库文件
- textview设置图片大小
- BZOJ 1021 DP
- runtime 实际应用汇总
- Log日志
- 隐马尔可夫模型(三)——隐马尔可夫模型的评估问题(前向算法)
- 如果看了此文你还不懂傅里叶变换,那就过来掐死我吧【完整版教程】
- 继承 的 相关概念
- solr在windows下的安装及配置
- Android 指纹识别
- 改变VLC模块参数