0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

at coder beginner 015 C再帰D動的計画法

Last updated at Posted at 2018-09-17

高橋くんは、上司から
会社で作っている N 個のソフトウェアに平均でどれくらいのバグがあるか調べろ
ただし、バグがないソフトは調査母数に含めるな
と指示されました。
しかも、上司は小数が嫌いです。とはいえ、バグ数の平均値を過小報告するわけにもいかないので、値を切り上げて報告することにしました。
高橋くんは、素早くバグ数の平均値をまとめて上司に報告する必要があります。 ソフトウェアごとのバグ数が与えられるので、バグが含まれるソフトウェアの、バグ数の平均値を小数で切り上げて求めてください。

切り上げのテクニック
AをBで割った値を切り上げたい。

if(a&b==0){
c=a/b;
}else{
 c= a/b+1;
}

としてもよいがどうも長い。もっとスマートに書くには、
(a+(b-1))/b
これで切り上げになる。

# include <iostream>
using namespace std;
int main(){
	int N;
	int A[110];
	int ans=0;
	int zero = 0;
	cin >> N;
	for (int i = 0; i < N; ++i) {
		cin >> A[i];
		if (A[i] == 0) {
			zero++;
		}
		ans += A[i];
	}
	int num = N - zero;
	if (num == 0)
		cout << 0 << endl;
	else
	cout << (ans + num - 1 )/ num << endl;
	return 0;
}

C

# include<iostream>
# include<algorithm>
# include<vector>
# include<string>
# include<list>
# include<cmath>
# include<map>
using namespace std;
using ll = long long;
const int INF = 1e9;
# define rep(i,n)for(int i=0;i<n;++i)
# define p pair<int,int>
int N, K;
int T[10][10];
bool dfs(int i, int x) {
	if (i == N) {
		return x == 0;
	}
	for (int m = 0; m < K; ++m) {
		if (dfs(i + 1, x^T[i][m])) {
			return true;
		}
	}
	return false;
}
int main() {
	cin >> N >> K;
	for (int i = 0; i < N; ++i) {
		for (int j = 0; j < K; ++j) {
			cin >> T[i][j];
		}
	}
	if (dfs(0, 0)) {
		cout << "Found" << endl;
	}
	else {
		cout << "Nothing" << endl;
	}
	return 0;
}

再帰。なんかもやもやするな、
D

# include<iostream>
# include<vector>
# include<algorithm>
# include<string>
# include<map>
# include<math.h>
# include<queue>
# include<deque>
# include<stack>
# include<cstdio>
# include<utility>
# include<set>
# include<list>
# include<cmath>
# include<stdio.h>
# include<string.h>
# include<cstdio>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using piii = pair<pii, pii>;
const int INF = 1e9 + 7;
int main() {
	int W;
	int N, K;
	int A[51], B[51];
	int dp[51][51][10010];
	cin >> W >> N >> K;
	for (int i = 0; i < N; ++i) {
		cin >> A[i] >> B[i];
	}
	for (int i = 0; i < 51; ++i) {
		for (int j = 0; j < 51; ++j) {
			for (int k = 0; k < 10010; ++k) {
				dp[i][j][k] = 0;
			}
		}
	}
	for (int i = 0; i < N; ++i) {
		for (int j = 0; j < K; ++j) {
			for (int k = 0; k <=W; ++k) {
				if (k >= A[i]) {
					dp[i + 1][j + 1][k] = max({ dp[i][j + 1][k], dp[i][j][k],dp[i][j][k - A[i]] + B[i] });
				}
				else {
					dp[i + 1][j + 1][k] = max(dp[i][j][k], dp[i][j + 1][k]);
				}
			}
		}
	}
	cout << dp[N][K][W] << endl;
	return 0;
}

dp

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?