对拍

对拍

C++ 对拍详解 - EdisonBa - 博客园

The Sample

n个数选k个,和为sum的方案数

暴力程序

#include <bits/stdc++.h>
using namespace std;

int n, k;
int ans;
int sum;

void dfs(int x, int start) {
	if (x == k+1) {
		if (sum == n) ans++;
		return;
	}
	for (int i = start; sum+i*(k-x+1) <= n; i++) {
		sum+=i;
		dfs(x+1,i);
		sum-=i;
	}
}

int main() {
	
	freopen("data.in","r",stdin);
	freopen("dfs.out","w",stdout);
	
	cin >> n >> k;
	dfs(1,1);
	cout << ans;
	return 0;
}

待测程序

#include<bits/stdc++.h>
using namespace std;

int n,k,f[201][7];  //f[k][x] k 分成 x 份 ={f[k-1][x-1],f[k-x][x]}

int main(){
	
	freopen("data.in","r",stdin);
	freopen("dp.out","w",stdout);
	
    cin >> n >> k;
    for (int i=1;i<=n;i++) {f[i][1]=1;f[i][0]=1;}for (int x=2;x<=k;x++) {f[1][x]=0;f[0][x]=0;}  // 边界,为了防止炸,我把有0的也处理了
    for (int i=2;i<=n;i++)
        for (int x=2;x<=k;x++)
            if (i>x) f[i][x]=f[i-1][x-1]+f[i-x][x];
            else f[i][x]=f[i-1][x-1];
    cout<<f[n][k];
    return 0;
}

DataMaker

#include <bits/stdc++.h>
using namespace std;

int main() {
	freopen("data.in","w",stdout);
	srand(time(0));
	cout << rand()%193+7 <<" "<< rand()%4+2;
	return 0;
}

Checker

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n = 100;
	while(n--) {
		system("DataMaker.exe");
		system("dfs.exe");
		system("dp.exe");
		if (system("fc dfs.out dp.out")) {
			break;
		}
	}
	return 0;
}
posted @ 2023-09-03 19:42  Codaaaa  阅读(29)  评论(0)    收藏  举报