本文主要是介绍SSL 2406 2408 约数 比萨,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
比赛
约数
题目:
求一个数的约数和
分析:
模拟,注意完全平方数的情况
代码:
#include <cstdio>
#include <cmath>
using namespace std;
int n,ans;
int main(){freopen("bri.in","r",stdin);freopen("bri.out","w",stdout);scanf("%d",&n);for (int i=1;i<=sqrt(n);i++){if (n%i==0) ans+=n/i+i;}if ((int)sqrt(n)*sqrt(n)==n) ans-=sqrt(n);printf("%d",ans);return 0;
}
比萨
题目:
限制一些原料无法使用,求能制作多少种比萨。
分析
数据很小, n ≤ 20 , 2 n < = 1048576 n≤20,2^n<=1048576 n≤20,2n<=1048576所以暴搜是可以的。关键就是判断,其实也很简单
代码
#include <cstdio>
using namespace std;
int n,m,a[53][53],ans; bool v[21];
bool check(){for (int i=1;i<=m;i++){int ans=0;for (int j=1;j<=a[i][0];j++)if (v[a[i][j]]) ans++;if (ans==a[i][0]) return 0;//不能用的原料都用上了。}return 1;
}
void dfs(int dep){if (dep>n) ans++;else{v[dep]=1; if (check()) dfs(dep+1);v[dep]=0; dfs(dep+1);}
}
int main(){scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){scanf("%d",&a[i][0]);for (int j=1;j<=a[i][0];j++)scanf("%d",&a[i][j]);}dfs(1);printf("%d",ans);return 0;
}
这篇关于SSL 2406 2408 约数 比萨的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!