22 条题解
-
48
嘀嘀嘀~~~本次题解已送达!
#include <bits/stdc++.h> using namespace std; int n, s[11], b[11], ans = 2000000000;//ans刚开始设置大一点 int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> s[i] >> b[i];//输入酸度、甜度 //循环枚举1~2的n次方-1 for (int i = 1; i < (1 << n); i++) { int sum1 = 1, sum2 = 0;//总酸度、总甜度每次枚举前先初始化为0 //检测i的每个二进制是不是1 for (int j = 0; j < n; j++) { if (i & (1 << j))//如果第j位是1 { sum1 *= s[j + 1]; sum2 += b[j + 1]; } } ans = min(ans, abs(sum1 - sum2));//更新最小值 } cout << ans; return 0; }
欢迎下次采购!
-
14
本题利用这节课的内容,用到&与<<
#include <bits/stdc++.h> using namespace std; int n,a[100],b[100],s=1000000; int main() { cin>>n; for (int i=1;i<=n;i++) cin>>a[i]>>b[i]; for (int i=1;i<(1<<n);i++) { int sum1=1,sum2=0;//酸度是乘法,开始为1;甜度是加法,开始为0; for (int j=0;j<n;j++) { if (i & (1<<j)) { sum1*=a[j+1];//计算总酸度 sum2+=b[j+1];//计算总甜度 } } s=min(s,abs(sum1-sum2));//计算最小值 } cout<<s; return 0; }
-
7
#include <bits/stdc++.h> using namespace std; int n,sum1 = 1,sum2,a[15],b[15],ans = 1000000000;//定义(全局)变量 int main() { cin >> n; for (int i = 0;i < n;i++) { cin >> a[i] >> b[i]; } for (int i = 1;i < (1 << n);i++) { sum1 = 1; sum2 = 0;//初始化 for (int j = 0;j < n;j++) { if (i & (1 << j)) { sum1 *= a[j];//酸就乘 sum2 += b[j];//甜就加 } } if (abs(sum1 - sum2) < ans)//绝对值比较 { ans = abs(sum1 - sum2);//更新答案 } } cout << ans;//输出答案 return 0; }
已AC,请放心使用 本日第1篇题解
-
6
AC代码
#include <bits/stdc++.h> using namespace std; int main() { long long n,a[11],b[11],minn; cin>>n; for(long long i=0;i<n;i++) cin>>a[i]>>b[i]; for(long long i=1;i<(1<<n);i++){ long long x,y; x=1,y=0; for(long long j=0;j<n;j++){ if(i&(1<<j)){ x*=a[j]; y+=b[j]; } } minn=min(minn,abs(x-y)); } cout<<minn; return 0; }
-
5
#include <bits/stdc++.h> using namespace std; int n, s[11], b[11], ans = 2000000000; int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> s[i] >> b[i]; for (int i = 1; i < (1 << n); i++) { int sum1 = 1, sum2 = 0; for (int j = 0; j < n; j++) { if (i & (1 << j)) { sum1 *= s[j + 1]; sum2 += b[j + 1]; } } ans = min(ans, abs(sum1 - sum2)); } cout << ans; return 0; }
-
5
#include <bits/stdc++.h> using namespace std; int n, s[11], b[11], ans = 2000000000;//ans刚开始设置大一点 int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> s[i] >> b[i];//输入酸度、甜度 //循环枚举1~2的n次方-1 for (int i = 1; i < (1 << n); i++) { int sum1 = 1, sum2 = 0;//总酸度、总甜度每次枚举前先初始化为0 //检测i的每个二进制是不是1 for (int j = 0; j < n; j++) { if (i & (1 << j))//如果第j位是1 { sum1 *= s[j + 1]; sum2 += b[j + 1]; } } ans = min(ans, abs(sum1 - sum2));//更新最小值 } cout << ans; return 0;
-
5
由于n不超过10,可以考虑O(2^n)子集枚举。 对于每种情况,使用左移运算和按位与运算,求出总酸度sum1和总甜度sum2,用abs函数求出差的绝对值。 对所有情况取最小值即可。
代码
#include <iostream> using namespace std; int n, s[11], b[11], ans = 2000000000; int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> s[i] >> b[i]; for (int i = 1; i < (1 << n); i++) { int sum1 = 1, sum2 = 0; for (int j = 0; j < n; j++) { if (i & (1 << j)) { sum1 *= s[j + 1]; sum2 += b[j + 1]; } } ans = min(ans, abs(sum1 - sum2)); } cout << ans; return 0; }
-
4
#include <bits/stdc++.h> using namespace std; int n, s[11], b[11], ans = 2000000000;//ans刚开始设置大一点 int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> s[i] >> b[i];//输入酸度、甜度 //循环枚举1~2的n次方-1 for (int i = 1; i < (1 << n); i++) { int sum1 = 1, sum2 = 0;//总酸度、总甜度每次枚举前先初始化为0 //检测i的每个二进制是不是1 for (int j = 0; j < n; j++) { if (i & (1 << j))//如果第j位是1 { sum1 *= s[j + 1]; sum2 += b[j + 1]; } } ans = min(ans, abs(sum1 - sum2));//更新最小值 } cout << ans; return 0;
-
4
#include <bits/stdc++.h> using namespace std; int n, s[11], b[11], ans = 2000000000;//ans刚开始设置大一点 int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> s[i] >> b[i];//输入酸度、甜度 //循环枚举1~2的n次方-1 for (int i = 1; i < (1 << n); i++) { int sum1 = 1, sum2 = 0;//总酸度、总甜度每次枚举前先初始化为0 //检测i的每个二进制是不是1 for (int j = 0; j < n; j++) { if (i & (1 << j))//如果第j位是1 { sum1 *= s[j + 1]; sum2 += b[j + 1]; } } ans = min(ans, abs(sum1 - sum2));//更新最小值 } cout << ans; return 0;
-
3
#include <bits/stdc++.h> using namespace std; int main() { long long n,a[11],b[11],minn; cin>>n; for(long long i=0;i<n;i++) cin>>a[i]>>b[i]; for(long long i=1;i<(1<<n);i++){ long long x,y; x=1,y=0; for(long long j=0;j<n;j++){ if(i&(1<<j)){ x*=a[j]; y+=b[j]; } } minn=min(minn,abs(x-y)); } cout<<minn; return 0; } --- AC代码
-
3
#include <bits/stdc++.h> using namespace std; int n,ans = 100000; struct STU { int a,b; }s[15]; int main() { cin >> n; for(int i = 0; i < n; i++) { cin >> s[i].a >> s[i].b; } for(int i = 1; i < (1 << n); i++) { int sum1 = 1,sum2 = 0; for(int j = 0; j < n; j++) { if(i & (1 << j)) { sum1 *= s[j].a; sum2 += s[j].b; } } ans = min(ans,abs(sum1 - sum2)); } cout << ans; return 0; }
-
0
#include <bits/stdc++.h>//**9739064** using namespace std; int n,sum1 = 1,sum2,a[15],b[15],ans = 1000000000;//定义(全局)变量 int main() { cin >> n; for (int i = 0;i < n;i++) { cin >> a[i] >> b[i]; } for (int i = 1;i < (1 << n);i++) { sum1 = 1; sum2 = 0; for (int j = 0;j < n;j++) { if (i & (1 << j)) { sum1 *= a[j]; sum2 += b[j]; } } if (abs(sum1 - sum2) < ans) { ans = abs(sum1 - sum2); } } cout << ans; return 0; }
-
0
上AC代码
#include <bits/stdc++.h> using namespace std; int n, s[11], b[11], ans = 2000000000; int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> s[i] >> b[i];//输入酸度和甜度 //枚举1~2的n次方-1 for (int i = 1; i < (1 << n); i++) { int sum1 = 1, sum2 = 0;//酸度是乘的,初始化为1;甜度是加的,初始化为0 //定义并初始化总酸度和总甜度 for (int j = 0; j < n; j++)//检查i的每个二进制是不是1 { if (i & (1 << j))//如果第j位是1 { sum1 *= s[j + 1];//酸的乘 sum2 += b[j + 1];//甜的加 } } ans = min(ans, abs(sum1 - sum2));//更新最小值 } cout << ans; return 0; }
-
-22
#include <bits/stdc++.h> using namespace std; int n, s[11], b[11], ans = 2000000000; int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> s[i] >> b[i]; for (int i = 1; i < (1 << n); i++) { int sum1 = 1, sum2 = 0; for (int j = 0; j < n; j++) { if (i & (1 << j)) { sum1 *= s[j + 1]; sum2 += b[j + 1]; } } ans = min(ans, abs(sum1 - sum2)); } cout << ans; return 0; }
-
-22
#include <iostream> #include <stdlib.h> using namespace std; int n, s[11], b[11], ans = 2000000000; int main() { cin >> n; for (int i = 1; i <= n; i++) cin >> s[i] >> b[i]; for (int i = 1; i < (1 << n); i++) { int sum1 = 1, sum2 = 0; for (int j = 0; j < n; j++) { if (i & (1 << j)) { sum1 *= s[j + 1]; sum2 += b[j + 1]; } } ans = min(ans, abs(sum1 - sum2)); } cout << ans; return 0; }
信息
- ID
- 51
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 5
- 标签
- 递交数
- 3273
- 已通过
- 1243
- 上传者