题目:
9510 修房屋
时间限制:1000MS 内存限制:65535K
提交次数:0 通过次数:0
题型: 编程题 语言: G++;GCC
Description
Dragon123的在马路旁边拥有一间老房子。市政府为了迎接亚运,规定凡是位于主干道旁边的房子必须进行修葺,否则一律派城管和施工队强拆。
因此,Dragon123不得不自己掏钱来修复他这套老房子。
在修房子的过程中,Dragon123需要三种不同类型的砖头,分别为1*20,1*28,1*32的。
建材城里只有1*75的砖头,不过大砖头可以裁成小砖头.dragon123希望知道他至少需要买多少1*75的砖头才够用。
输入格式
输入数据第一行包含三个整数X,Y,Z(0<=X,Y,Z<=100),分别表示dragon123需要的1*20,1*28,1*32的砖头的数量。
输出格式
输出为一个整数,为dragon123需要的1*75的砖头的数量。
输入样例
4 2 2
输出样例
3
来源 PKKJ
作者 a470086609
题解:
这题其实就是把不同的小砖头组合,A,B,C,这一块大砖头可以切成{2*A,B},{2*A,C},{B,C},以及{3*A},{2*B},{2*C}
接下来按照数量优先的顺序排好,数量相同的条件下排面积。面积大的靠在前面啊。
{2*A,C},{2*A,B},{3A},{2*C} , {B,C} , {2*B}
一共六种使用方式,一次按照顺序进行切割,达到最终状态后停止就可以了。
#ifdef local
#include <ctime>
#endif
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <queue>
#include <set>
#include <map>
#define rep(i,e) for(int i=0;i<e;i++)
#define rep1(i,e) for(int i=1;i<=e;i++)
#define repx(i,x,e) for(int i=x;i<=e;i++)
#define ll long long
#define pii pair<int,int>
#define F first
#define S second
#define pb push_back
#define mp make_pair
#define mset(var,val) memset(var,val,sizeof(var))
#define IOS ios::sync_with_stdio(false);cin.tie(0)
#define scd(a) scanf("%d",&a)
#define scdd(a,b) scanf("%d%d",&a,&b)
#define scddd(a,b,c) scanf("%d%d%d",&a,&b,&c)
#define test(a) cout<<a<<endl
#define test2(a,b) cout<<a<<" "<<b<<endl
#define test3(a,b,c) cout<<a<<" "<<b<<" "<<c<<endl
typedef unsigned long long ull;
using namespace std;
const int inf = 0x3f3f3f3f;
const int N = 1e6 + 10;
int len[N];
int adder[][3] = { {2, 0, 1},{2, 1, 0},{3, 0, 0},{0, 0, 2},{0, 1, 1},{0, 2, 0}};
int num[5];
void work() {
cin >> num[0] >> num[1] >> num[2];
int ans = 0;
for (int i = 0; i <=5; i++) {
while (1) {
int flag = 1;
for (int j = 0; j < 3; j++) {
if (num[j] - adder[i][j] < 0) {
flag = 0;
}
}
if (flag) {
for (int j = 0; j < 3; j++) {
num[j] = num[j] - adder[i][j];
}
ans++;
} else {
break;
}
}
}
for (int i = 0; i < 3; i++) {
if (num[i]) {
ans++;
break;
}
}
cout << ans << endl;
}
int main() {
int debug=0;
#ifdef local
debug =1;
#endif
if (debug) {
freopen("in.txt", "r", stdin);
freopen("out", "w", stdout);
printf("debuging output:\n");
}
work();
}