SRM553

1.PlatypusDuckAndBeaver

#include<iostream>
using namespace std;

class PlatypusDuckAndBeaver{
public:
	int minimumAnimals(int webbedFeet, int duckBills, int beaverTails){
		return webbedFeet/2-beaverTails;
	}
};

 

2.Suminator

#include<iostream>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
class Suminator{
public:
	int suminator(vector <int> program, int pos, int val) {
		stack<ll> stk;
		program[pos] = val;
		int ps = program.size();
		for(int i = 0; i < ps; i++) {
			if(program[i] != 0) {
				stk.push(program[i]);
			}
			else {
				ll sum = 0;
				for(int j = 0; j < 2 && !stk.empty(); j++) {
					sum += stk.top();
					stk.pop();
				}
				stk.push(sum);
			}
		}
		return stk.top();
	}
	int findMissing(vector <int> program, int wantedResult){
		int pos = find(program.begin(), program.end(), -1) - program.begin();
		if(suminator(program, pos, 0) == wantedResult) {
			return 0;
		}
		ll res = suminator(program, pos, 0);
		ll ans = wantedResult - res;
		if(ans <= 0)
			return -1;
		int temp = suminator(program, pos, ans);
		if(temp = wantedResult)
			return ans;
		else 
			return -1;

	}
};

 

3.SafeRemoval

#include<iostream>
#include<algorithm>
#include<vector>
#include<functional>
using namespace std;

class SafeRemoval {
public:
	int removeThem(vector <int> seq, int k) {
		int f[55][55][55][55];
		int a[4][55];
		int b[4][55];
		int i;
		int n = seq.size();
		sort(seq.begin(),seq.end(),greater <int> ());
		for( i = 0; i < 3; i++) {
			a[i][0] = b[i][0] =0;
		}
		for( i = 0; i < n; i++) {
			int mod = seq[i] % 4;
			a[mod][++a[mod][0]] = seq[i];
			b[mod][a[mod][0]] = seq[i] + b[mod][a[mod][0] - 1];
		}
		for(int i0 = 0; i <= a[i0][0]; i++)
			for(int i1 = 0; i <=a[1][0]; i++)
				for(int i2 = 0; i <=a[2][0]; i++)
					for(int i3 = 0; i <=a[3][0]; i++){
						if(i0 + i1 + i2 + i3 >= n - k) {
							if(i0 + i1 + i2 + i3 == n - k) {
								f[i0][i1][i2][i3] = b[0][i0] + b[1][i1] + b[2][i2] + b[3][i3];
								if ((f[i0][i1][i2][i3] % 4) == 0) 
									f[i0][i1][i2][i3] = -1;
							}
							else {
								f[i0][i1][i2][i3] = -1;
								if (((b[0][i0] + b[1][i1] + b[2][i2] + b[3][i3]) % 4) != 0) {
									if (i0 > 0 && f[i0][i1][i2][i3] < f[i0 - 1][i1][i2][i3]) f[i0][i1][i2][i3] = f[i0 - 1][i1][i2][i3];
									if (i1 > 0 && f[i0][i1][i2][i3] < f[i0][i1 - 1][i2][i3]) f[i0][i1][i2][i3] = f[i0][i1 - 1][i2][i3];
									if (i2 > 0 && f[i0][i1][i2][i3] < f[i0][i1][i2 - 1][i3]) f[i0][i1][i2][i3] = f[i0][i1][i2 - 1][i3];
									if (i3 > 0 && f[i0][i1][i2][i3] < f[i0][i1][i2][i3 - 1]) f[i0][i1][i2][i3] = f[i0][i1][i2][i3 - 1];
								}
							}
						}
					}
					return f[ a[0][0] ][ a[1][0] ][ a[2][0] ][ a[3][0] ];
	}
};



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值