//2070
#include<stdio.h>#define N 51typedef long long ll;ll f[N];void init(){ f[0] = 0; f[1] = 1; for (int i = 2; i < N; i++) { f[i] = f[i - 1] + f[i - 2]; }}int main()
{ int n; init(); while (~scanf("%d",&n)) { if (n == -1) { break; } printf("%lld\n", f[n]); } return 0;}
//2075
#include<stdio.h>int main(){ int t; int a, b; scanf("%d", &t); while (t--) { scanf("%d%d", &a, &b); if (a%b==0) { printf("YES\n"); } else { printf("NO\n"); } } return 0;}
//2078
/*思路:他一晚上复习的最高效率值是多少,即求它的效率差值最大,从而能够保证效率值的平方最大,也就能保证效率值得平方和最大。而且在复习第一门课程后,他总是找一门比该课程简单的课程进行复习,那么我们可以知道只有保证了第一次的效率差值最大才能保证后面的其最大,当第一个不为最大的时候,后面又要一次递减,所以就更不能保证其为最大了。那么其实推理可得,我们只要保证第一次的效率值最大,也就能够保证其这一整天的效率值最大了;*/#include<iostream>#include<algorithm>#define N 41int diff[N];using namespace std;int main(){ int T; int n, m;//n是他所选的课程,m是他一晚上最多能复习的课程 cin >> T; int sum = 0; while (T--) { sum = 0; cin >> n >> m; for (int i = 0; i < n; i++) { scanf("%d", &diff[i]);//输入各门课程的难度 } sort(diff, diff + n); sum = 0; sum += (100 - diff[0] )* (100 - diff[0]); cout << sum << endl; } return 0;}
//2079
#include<stdio.h>#include<string.h>#define N 55int sum;int dp[N];struct node{ int a, b;}cla[N];int main(){ int T; int n, k; scanf("%d", &T); while (T--) { memset(dp, 0, sizeof(dp)); //n个学分 scanf("%d%d", &n, &k); for (int i = 1; i<= k; i++) { //学分a的课有b门 scanf("%d%d", &cla[i].a, &cla[i].b); } //求n个学分共有多少组合,一样学分的课没啥差别 dp[0] = 1; for (int i = 1; i <= k; i++) { for (int j = n; j >= cla[i].a; j--)//容量 { //b代表数量 for (int l = 1; l <= cla[i].b; l++)//数量 { if (j-cla[i].a*l>=0) { dp[j] += dp[j - cla[i].a*l]; } else { break; } } } } printf("%d\n", dp[n]); } return 0;}