A.水题
#include<cstdio>
#include<algorithm>
#define N 5009
using namespace std;
int s[150];
int main()
{
freopen("t.txt","r",stdin);
int n,T;
scanf("%d%d",&n,&T);
for(int i=0;i<n;i++)
{
scanf("%d",&s[i]);
}
sort(s,s+n);
int cnt=0,ans=0;
for(int i=0;i<n;i++)
{
ans+=s[i];
if(ans<=T) cnt++;
else break;
}
printf("%d\n",cnt);
return 0;
}
D.动态规划
#include<bits/stdc++.h>
using namespace std;
int s[205];
int fa[205],re[205],color[205];
int dp[100004];
map<int,int> q;
struct node
{
int c1,c2;
}p[205];
int find(int x)
{
if(x!=fa[x])
{
int t=find(fa[x]);
re[x]=re[x]^re[fa[x]];
fa[x]=t;
}
return fa[x];
}
void unite(int x,int y)
{
int f1=find(x);
int f2=find(y);
fa[f1]=f2;
re[f1]=re[x]^re[y]^1;
}
int main()
{
//freopen("t.txt","r",stdin);
int T,sum,u,v,n,m;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(re,0,sizeof(re));
memset(p,0,sizeof(p));
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
fa[i]=i;
sum=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&s[i]);
s[i]/=100;
sum+=s[i];
}
while(m--)
{
scanf("%d%d",&u,&v);
unite(u,v);
}
q.clear();
int cnt=0;
for(int i=1;i<=n;i++)
{
int x=find(i);
if(q.find(x)==q.end())
{
q[x]=++cnt;
}
int id=q[x];
color[i]=id;
if(re[i])
p[id].c1+=s[i];
else
p[id].c2+=s[i];
}
int ma=0;
dp[0]=1;
for(int i=1;i<=cnt;i++)
{
for(int j=ma;j>=0;j--)
{
if(dp[j])
{
dp[j+p[i].c1]=1;
dp[j+p[i].c2]=1;
}
}
ma+=max(p[i].c1,p[i].c2);
}
int ans;
for(int i=(sum+1)/2;i<=ma;i++)
{
if(dp[i])
{
ans=i;
break;
}
}
printf("%d\n",ans*100);
}
return 0;
}
L.打表题
#include<cstdio>
using namespace std;
int main()
{
//freopen("t.txt","r",stdin);
int n,t;
/*scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&t);
}*/
for(int n=1;n<=20;n++)
{
printf("%d: ",n);
long long res=1;
if(n&1)
{
if(n==1)
printf("1\n");
else if(n<6||(((n-1)/2)&1)==0)
printf("%lld\n",n*2);
else
printf("12\n");
}else
{
int y=n/2;
if(y&1)
printf("%d\n",n);
else
printf("4\n");
}
}
return 0;
}