poj 1717 Dominoes
来源:互联网 发布:淘宝客贷款买家能贷吗 编辑:程序博客网 时间:2024/05/22 03:05
题目链接:http://poj.org/problem?id=1717
题目思路:用dp[i][j]记录前i个骨牌的总数是j时的最小翻转数,个人觉得这样比用差值dp要简单些。
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<string>#include<queue>#include<algorithm>#include<vector>#include<stack>#include<list>#include<iostream>#include<map>using namespace std;#define inf 0x3f3f3f3f#define Max 110int max(int a,int b){return a>b?a:b;}inline int min(int a,int b){return a<b?a:b;}int dp[2][1010*14];int num1[1010],num2[1010];int main(){ int n,i,j,rec; scanf("%d",&n); int sum=0; for(i=0;i<n;i++) { scanf("%d%d",&num1[i],&num2[i]); sum+=num1[i]; sum+=num2[i]; } for(i=0;i<=sum;i++) dp[0][i]=inf; int tmp=0; dp[0][0]=0; for(i=0;i<n;i++) { for(j=sum;j>=0;j--) { dp[1-tmp][j]=inf; if(j-num1[i]>=0&&dp[tmp][j-num1[i]]!=inf) { dp[1-tmp][j]=min(dp[1-tmp][j],dp[tmp][j-num1[i]]); } if(j-num2[i]>=0&&dp[tmp][j-num2[i]]!=inf) dp[1-tmp][j]=min(dp[1-tmp][j],dp[tmp][j-num2[i]]+1); } tmp=1-tmp; } for(i=sum/2;i>=0;i--) { if(dp[tmp][i]!=inf) { rec=i; break; } } for(i=sum/2+1;i<=sum;i++) { if(dp[tmp][i]!=inf) { if(sum-i>rec) { rec=i; break; } else if(sum-i==rec&&dp[tmp][i]<dp[tmp][rec]) { rec=i; break; } } } printf("%d\n",dp[tmp][rec]);}
- poj 1717 Dominoes
- poj 1717 Dominoes
- poj 1717 Dominoes
- poj 1717 Dominoes (dp)
- poj 1717 Dominoes 背包
- POJ 1717 Dominoes
- POJ 1717 Dominoes(DP)
- poj 1717 Dominoes 01背包
- poj 1717 Dominoes(dp)
- 【POJ 1717】Dominoes(dp)
- Dominoes
- poj 3797 Tiling a Grid With Dominoes 状压dp
- pku1717 Dominoes
- Tiling Dominoes
- uva11270Tiling Dominoes
- Long Dominoes
- POJ-3797(状态转移)(Tiling a Grid With Dominoes )
- Dominoes-第一个回溯
- J2ME开发环境搭建 之 EclipseMe
- Android学习笔记
- HDU 2429 WordGame 等比矩阵和
- ARM DSP FPGA的技术特点和区别
- c++结构体
- poj 1717 Dominoes
- 2012年五大开源项目
- 自学网站
- BOA移植
- 第七周任务一
- Android 常用工具类封装
- 第七周任务二
- Rman数据迁移至ASM数据库
- android 实现微博一键分享功能