
0 点赞 评论 收藏
分享

0 点赞 评论 收藏
分享
DeGuang199...:cout<<"666666"<<endl;

0 点赞 评论 收藏
分享

0 点赞 评论 收藏
分享
向宇同桌:大佬。。。都是简单xxx

0 点赞 评论 收藏
分享
闷声发财00:学***佬思路 #include <iostream>
// #include <cstring>
#include <memory.h>
using namespace std;
const int N = 1e5 + 10;
int nums[N], dp[N];
int n, sum, sum1, sum2, res;
int main(){
cin >> n;
for(int i=1; i<=n; ++i){
cin >> nums[i];
sum += nums[i];
}
for(int i=1; i<=n; ++i)
for(int j=sum/2; j-nums[i]>=0; --j)
dp[j] = max(dp[j], dp[j-nums[i]] + nums[i]);
sum1 = dp[sum/2];
memset(dp, -1, sizeof dp);
dp[0] = 0;
for(int i=1; i<=n; ++i)
for(int j=sum1; j-nums[i]>=0; --j)
if(dp[j-nums[i]] != -1)
dp[j] = max(dp[j], dp[j-nums[i]] + 1);
res = abs(dp[sum1] - (n - dp[sum1]));
sum2 = sum - sum1;
memset(dp, -1, sizeof dp);
dp[0] = 0;
for(int i=1; i<=n; ++i)
for(int j=sum2; j-nums[i]>=0; --j)
if(dp[j-nums[i]] != -1)
dp[j] = max(dp[j], dp[j-nums[i]] + 1);
res = max(res, abs(dp[sum2] - (n - dp[sum2])));
cout << abs(sum1 - sum2) << ' ' << res << endl;
return 0;
}

0 点赞 评论 收藏
分享

0 点赞 评论 收藏
分享
ljc0825:第二题,给你一个只有0和1的字符串,你现在有一个操作,可以把相邻的一对0和1消去,问最后能得到最短长度。 其实这个题就是智商题,仔细想一下,只要字符串里边还有0和1同时存在,那么就一定还能消去,实际上答案就是字符串长度-0和1中数量较少者的数量*2。 上代码 #include<stdio.h>
#include<algorithm>
using namespace std;
int n;
char s[200010];
int main()
{
scanf("%d",&n);
scanf("%s",s);
int num0=0,num1=0;
for(int i=0;i<n;i++)
{
if(s[i]=='0')
num0++;
else
num1++;
}
int ans=n-min(num0,num1)*2;
printf("%d",ans);
}

0 点赞 评论 收藏
分享
创作者周榜
更多
关注他的用户也关注了: