poj 1717 Dominoes 背包
来源:互联网 发布:网络广告位怎么买 编辑:程序博客网 时间:2024/05/22 05:33
Dominoes
Time Limit: 1000MS Memory Limit: 65536KTotal Submissions: 6464 Accepted: 2131
Description
A domino is a flat, thumbsized tile, the face of which is divided into two squares, each left blank or bearing from one to six dots. There is a row of dominoes laid out on a table:
The number of dots in the top line is 6+1+1+1=9 and the number of dots in the bottom line is 1+5+3+2=11. The gap between the top line and the bottom line is 2. The gap is the absolute value of difference between two sums.
Each domino can be turned by 180 degrees keeping its face always upwards.
What is the smallest number of turns needed to minimise the gap between the top line and the bottom line?
For the figure above it is sufficient to turn the last domino in the row in order to decrease the gap to 0. In this case the answer is 1.
Write a program that: computes the smallest number of turns needed to minimise the gap between the top line and the bottom line.
The number of dots in the top line is 6+1+1+1=9 and the number of dots in the bottom line is 1+5+3+2=11. The gap between the top line and the bottom line is 2. The gap is the absolute value of difference between two sums.
Each domino can be turned by 180 degrees keeping its face always upwards.
What is the smallest number of turns needed to minimise the gap between the top line and the bottom line?
For the figure above it is sufficient to turn the last domino in the row in order to decrease the gap to 0. In this case the answer is 1.
Write a program that: computes the smallest number of turns needed to minimise the gap between the top line and the bottom line.
Input
The first line of the input contains an integer n, 1 <= n <= 1000. This is the number of dominoes laid out on the table.
Each of the next n lines contains two integers a, b separated by a single space, 0 <= a, b <= 6. The integers a and b written in the line i + 1 of the input file, 1 <= i <= 1000, are the numbers of dots on the i-th domino in the row, respectively, in the top line and in the bottom one.
Each of the next n lines contains two integers a, b separated by a single space, 0 <= a, b <= 6. The integers a and b written in the line i + 1 of the input file, 1 <= i <= 1000, are the numbers of dots on the i-th domino in the row, respectively, in the top line and in the bottom one.
Output
Output the smallest number of turns needed to minimise the gap between the top line and the bottom line.
Sample Input
46 11 51 31 2
Sample Output
1
Source
CEOI 1997
背包问题,数组的应用。
#include<cstdio>#include<string>#include<cstring>#include<iostream>#include<cmath>#include<algorithm>using namespace std;typedef long long ll;const int INF =0x3f3f3f3f;const int maxn=1000 ;int n,V,st;int val[maxn+5];int dp[maxn+5][12010];int fun(int x){ return x+6000;}int ans,best;void work(){ int x,y; V=st=0; for(int i=1;i<=n;i++) { scanf("%d%d",&x,&y); val[i]=x-y; st+=val[i]; V+=abs(val[i]); } memset(dp[0],0x3f,sizeof dp[0]); dp[0][fun(st)]=0; for(int i=1;i<=n;i++) { int tval=-2*val[i]; for(int v=-V;v<=V;v++) { dp[i][fun(v)]=dp[i-1][fun(v)]; if( -V<=v-tval&&v-tval<=V) dp[i][fun(v)]=min(dp[i][fun(v)],dp[i-1][fun(v-tval)]+1); } } int best=INF,ans=INF; for(int v=-V;v<=V;v++) if(dp[n][fun(v)]!=INF) { if( abs(v)<best ) { best=abs(v); ans=dp[n][fun(v)]; } else if(abs(v)==best) { ans=min(ans,dp[n][fun(v)]); } } cout<<ans<<endl;}int main(){ while(~scanf("%d",&n) ) work(); return 0;}
0 0
- poj 1717 Dominoes 背包
- poj 1717 Dominoes 01背包
- poj 1717 Dominoes
- poj 1717 Dominoes
- poj 1717 Dominoes
- poj 1717 Dominoes (dp)
- POJ 1717 Dominoes
- POJ 1717 Dominoes(DP)
- poj 1717 Dominoes(dp)
- 【POJ 1717】Dominoes(dp)
- POJ1717 Dominoes (背包)
- poj1717 Dominoes (背包)
- POJ1717 Dominoes DP,背包的变形
- Dominoes
- poj 3797 Tiling a Grid With Dominoes 状压dp
- POJ 背包
- pku1717 Dominoes
- Tiling Dominoes
- Qt QPainter绘图原理
- JDBC学习笔记(二):连接Oracle数据库(DriverManager)
- poj 2249 排列组合问题
- 闭关日记 Day11
- Android开发 全面解析Activity生命周期
- poj 1717 Dominoes 背包
- C语言实现windows和linux下socket通信
- 三大运营商发展史
- 预处理#define中的符号和字符串问题
- Linux下的Git服务器搭建
- iOS GCD不同场景的使用比较
- C++作业2
- leetcode015 3Sum
- hdu 5631 并查集