对拍
对拍
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;
}

浙公网安备 33010602011771号