1.黑板上的数
#include<iostream>
#include<algorithm>
using namespace std;
char bit[105];
int main()
{
int k,sum=0;
cin>>k;
cin>>bit;
int i=0;
for(;bit[i]!='\0';i++)
sum+=(bit[i]^48);
if(sum>=k)
{
cout<<0;
return 0;
}
sort(bit,bit+i,less<int>());
i=0;
while(sum<k)
{
sum+=(9-(bit[i++]^48));
}
cout<<i;
return 0;
}
2.新型冠状病毒
#include<iostream>
using namespace std;
int read()
{
int x=0,f=1;
char ch=getchar();
while(ch<'0' || ch>'9')
{
if(ch=='-')f=-1;
ch=getchar();
}
while(ch<='9' && ch>='0')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
int s[1000005];
int v[1000005];
int main()
{
int n,k;
n=read();
k=read();
for(int i=1;i<=n;i++)
s[i]=read();
for(int i=1;i<=n;i++)
v[i]=read();
int Vmax=v[k],Vmin=v[k];
for(int i=1;i<=n;i++)
{
if(s[i]<=s[k])
{
Vmax=max(Vmax,v[i]);
}
else if(s[i]>s[k])
{
Vmin=min(Vmin,v[i]);
}
}
int ans=0;
for(int i=1;i<=n;i++)
{
if(s[i]==s[k])
ans++;
else if(s[i]<s[k] && v[i]>Vmin)
{
ans++;
}
else if(s[i]>s[k] && v[i]<Vmax)
{
ans++;
}
}
cout<<ans;
return 0;
}
3.数组跳远
#include<iostream>
using namespace std;
inline int read()
{
int x=0;
char ch=getchar();
while(ch<'0' || ch>'9')ch=getchar();
while(ch>='0' && ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x;
}
int num[200005];
int main()
{
int t;
t=read();
while(t--)
{
int n;
n=read();
for(int i=0;i<n;i++)
{
num[i]=read();
}
int ans=0;
for(int i=n-1;i>=0;i--)
{
if(num[i]+i<n)
num[i]+=num[num[i]+i];
ans=max(ans,num[i]);
}
printf("%d\n",ans);
}
return 0;
}
4.最大报销额
#include<iostream>
#include<iomanip>
#include<vector>
using namespace std;
vector<double> num;
double cnt[4];
double ans=10000000.0;
void DFS(int index,int size,double target)
{
if(target>=0)
ans=min(ans,target);
for(int i=index;i<size;i++)
{
if(num[i]<=target)
DFS(i+1,size,target-num[i]);
}
}
int main()
{
while(1)
{
double my;
int n;
cin>>my>>n;
if(n==0)
break;
num.clear();
for(int i=0;i<n;i++)
{
int m;
cin>>m;
bool flag=0;
for(int j=1;j<=3;j++)
cnt[j]=0;
double sum=0.0;
for(int j=0;j<m;j++)
{
double money;
char type,ch;
cin>>type>>ch>>money;
sum+=money;
if(type>'C')
{
flag=1;
continue;
}
cnt[type^64]+=money;
if(money>600.0)
flag=1;
if(sum>1000.0)
flag=1;
}
if(flag==0)
{
num.push_back(sum);
}
}
if(num.size()==0)
{
cout<<fixed<<setprecision(2)<<0.00<<'\n';
}
else
{
ans=10000000.0;
DFS(0,num.size(),my);
if(ans>my)
cout<<fixed<<setprecision(2)<<0.00<<'\n';
else
cout<<fixed<<setprecision(2)<<my-ans<<'\n';
}
}
return 0;
}
5.最小钱币数
#include<iostream>
using namespace std;
#define INF 0x3f3f3f3f
int read()
{
int x=0;
char ch=getchar();
while(ch<'0' || ch>'9')ch=getchar();
while(ch>='0' && ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x;
}
int dp[2005];
void init(int m)
{
for(int i=0;i<=m;i++)
dp[i]=INF;
}
int main()
{
int m;
while(1)
{
m=read();
if(m==0)
break;
init(m);
int k=read();
dp[0]=0;
for(int i=1;i<=k;i++)
{
int x=read();
for(int c=x;c<=m;c++)
{
dp[c]=min(dp[c],dp[c-x]+1);
}
}
if(dp[m]==INF)
cout<<"Impossible\n";
else
cout<<dp[m]<<'\n';
}
return 0;
}