12 条题解
-
38
一个赞拿走
#include <iostream> #include <algorithm> using namespace std; int n,m,ans=10000; int a[15]; int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { cin>>a[i];//hetao1415825 } sort(a + 1, a + n + 1); do { int num = 1, sum = 0; for (int i = 1; i <= n; i++) { if (sum + a[i] > m) { sum = 0; num++; } sum += a[i]; } ans = min(ans, num); } while (next_permutation(a + 1, a + n + 1)); cout << ans; return 0; }
笑话时间到(5个); 1:老师:“你的题为《抢救亲人》的作文怎么连一个标点符号也没有?”
学生:“那么急的事怎么能停顿呢?” 2:今天戴耳机听歌,发现左边没声音了,经过检查才发现是虚惊一场,原来是左耳聋了,我还以为耳机坏了,吓我一跳。
3:朋友中午请我吃饭,买单的时候我看到他掏钱掏得很慢,就说“要不我来掏吧。”“那怎么好意思啊!”“没事。”于是我把手伸进了他的口袋。
4:一天没戴眼镜逛街,看到一个既恶心又丑陋的人。想过去看看到底是谁,原来是一面镜子。
5:老王掉进了水井里,在村民的热心帮助下,老王终于适应了水井里面的生活。
笑话结束,点个赞吧,求求了; 下一个题还有三个,期待吧。。。。。。
-
27
题目大意
存在n个数,将这n个数分成若干组,每组数字之和不能大于w,问最少能分成几组。
提示
最简单的分组方案便是从前往后拿取数字,若组内数字之和大于w,就新建一个组。
完整思路
求出n个数的全排列,每次排列从前往后拿取数字,若组内数字之和大于w,就新建一个组。
核心代码
sort(a + 1, a + n + 1); do { int num = 1, sum = 0; for (int i = 1; i <= n; i++) { if (sum + a[i] > w) { sum = 0; num++; } sum += a[i]; } ans = min(ans, num); } while (next_permutation(a + 1, a + n + 1));
-
3
酷似二分答案的时候检验当前情况是否正确的感觉
#include <bits/stdc++.h> using namespace std; int n , w , a[15] , ans = 100000; int count( int a[] ) { int t = 1, sum = 0; //注意一下t的初始值是1即可 for ( int i = 1; i <= n; i ++ ) { sum += a[i]; if ( sum > w ) { t ++; sum = a[i]; } } return t; } int main() { cin >> n >> w; for ( int i = 1; i <= n; i ++ ) cin >> a[i]; sort( a , a + 1 + n ); do { int sum = count( a ); ans = min( sum , ans ); } while ( next_permutation( a + 1 , a + 1 + n ) ); cout << ans << endl; system("pause"); return 0; }
-
2
P1021 缆车
分析
排列之后挨个判断就可以了
代码
#include <bits/stdc++.h> using namespace std;
int a[105];
int main(){ int n,w; cin>>n>>w; for (int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+n+1); int mmin=INT_MAX; do{ int sum=0; int cnt=1; for (int i=1;i<=n;i++){ sum+=a[i]; if (sum>w){ cnt++; sum=a[i]; } } mmin=min(mmin,cnt); }while (next_permutation(a+1,a+n+1)); cout<<mmin<<endl; return 0; }
-
2
#include <bits/stdc++.h> using namespace std; int main() { int n, w, ans = 9999999; cin >> n >> w; int num[n + 1]; for (int i = 1; i <= n; i++) { cin >> num[i]; } sort(num + 1, num + n + 1); do { int sum = 0, m = 1; for (int i = 1; i <= n; i++) { if (sum + num[i] > w) { sum = 0; m++; } sum += num[i]; } ans = min(ans, m); } while (next_permutation(num + 1, num + n + 1)); cout << ans; return 0; }
-
0
#include <iostream> #include <algorithm> using namespace std; int n,m,ans=10000; int a[15]; int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { cin>>a[i]; } sort(a + 1, a + n + 1); do { int num = 1, sum = 0; for (int i = 1; i <= n; i++) { if (sum + a[i] > m) { sum = 0; num++; } sum += a[i]; } ans = min(ans, num); } while (next_permutation(a + 1, a + n + 1)); cout << ans; return 0; } //已AC!不得抄袭!
-
-2
30分:
#include<bits/stdc++.h> #include<algorithm> using namespace std; int n,w,a[11],money,sum=1,sum2; int main() { cin>>n>>w; for(int i=1;i<=n;i++) { cin>>a[i]; } sort(a+1,a+n+1); while(sum<n) { for(int i=sum;i<=n;i++) { if(sum2+a[i]<=w) { sum++; sum2+=a[i]; if(sum>=n) { break; } } } money++; } cout<<money+1; return 0; }
100分:
#include <bits/stdc++.h> #include <algorithm> using namespace std; int n,m,ans=10000; int a[15]; int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { cin>>a[i]; } sort(a + 1, a + n + 1); do { int num = 1, sum = 0; for (int i = 1; i <= n; i++) { if (sum + a[i] > m) { sum = 0; num++; } sum += a[i]; } ans = min(ans, num); } while (next_permutation(a + 1, a + n + 1)); cout << ans; return 0; }
-
-2
#include <bits/stdc++.h> using namespace std; int n,student_weight,ans=INT_MAX; int main(){ cin>>n>>student_weight; vector<int>v(n); for (int i=0;i<n;i++)cin>>v[i]; sort(v.begin(),v.end()); do{ int sum=0,people=1; for (vector<int>::iterator it=v.begin();it!=v.end();it++){ if (sum+*it>student_weight){ people++; sum=0; } sum+=*it; } ans=min(ans,people); }while(next_permutation(v.begin(),v.end())); cout<<ans; return 0; }
-
-2
#include <bits/stdc++.h> using namespace std; int main() { int n, w, ans = 9999999; cin >> n >> w; int num[n + 1]; for (int i = 1; i <= n; i++) { cin >> num[i]; } sort(num + 1, num + n + 1); do { int sum = 0, m = 1; for (int i = 1; i <= n; i++) { if (sum + num[i] > w) { sum = 0; m++; } sum += num[i]; } ans = min(ans, m); } while (next_permutation(num + 1, num + n + 1)); cout << ans; return 0; }
-
-2
#include <iostream> #include <algorithm> using namespace std; int n,m,ans=10000; int a[15]; int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { cin>>a[i];//hetao1415825 } sort(a + 1, a + n + 1); do { int num = 1, sum = 0; for (int i = 1; i <= n; i++) { if (sum + a[i] > m) { sum = 0; num++; } sum += a[i]; } ans = min(ans, num); } while (next_permutation(a + 1, a + n + 1)); cout << ans; return 0; }
-
-4
#include <bits/stdc++.h> using namespace std; int main(){ int n,w,a[15],sum=0,cnt=0,ans=9999999; cin>>n>>w; for(int i=1;i<=n;i++)cin>>a[i]; sort(a+1,a+n+1); do{ cnt=1,sum=0; for(int i=1;i<=n;i++){ if(sum+a[i]>w)sum=0,cnt++; sum+=a[i]; } ans=min(ans,cnt); }while(next_permutation(a+1,a+n+1)); cout<<ans<<endl; return 0; }
-
-8
#include <bits/stdc++.h> using namespace std; int n , w , a[15] , ans = 100000; int count( int a[] ) { int t = 1, sum = 0; //注意一下t的初始值是1即可 for ( int i = 1; i <= n; i ++ ) { sum += a[i]; if ( sum > w ) { t ++; sum = a[i]; } } return t; } int main() { cin >> n >> w; for ( int i = 1; i <= n; i ++ ) cin >> a[i]; sort( a , a + 1 + n ); do { int sum = count( a ); ans = min( sum , ans ); } while ( next_permutation( a + 1 , a + 1 + n ) ); cout << ans << endl; system("pause"); return 0; }
- 1
信息
- ID
- 14
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 4
- 标签
- 递交数
- 2156
- 已通过
- 932
- 上传者