B -Piggy-Bank HDU - 1114
题意:给你存钱罐的重量和装满钱的存钱罐的重量,再给你一些货币的重量和价值,问这个存钱罐装满钱后的最小价值是多少。
题解:完全背包问题。
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int dp[50000+10];
struct cc{
int x,y;
}a[50000+10];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int E,F;
scanf("%d%d",&E,&F);
F-=E;
int n;
scanf("%d",&n);
memset(dp,63,sizeof(dp));
dp[0]=0;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&a[i].x,&a[i].y);
}
for(int i=1;i<=n;i++)
{
for(int j=a[i].y;j<=F;j++)
{
dp[j]=min(dp[j],dp[j-a[i].y]+a[i].x);
}
}
if(dp[F]==dp[50001])
{
printf("This is impossible.\n");
}
else
{
printf("The minimum amount of money in the piggy-bank is %d.\n",dp[F]);
}
}
}
C - Fire Net HDU - 1045
题意:给你一个棋盘,棋盘有一些障碍。现在你要在棋盘上放置一些炮塔,但是炮塔不可以在同一行或同一列,除非两个炮塔之间有障碍,求最多放多少个炮塔。
题解:数据很小,直接暴搜。
D - Oh Those Palindromes CodeForces - 1064C
题意:你有一些字母,问这些字母如何排序才能使得组成的字符串包含的回文子串最多。
题解:排序。拿lol举例,其包含的回文子串有“l” 、“o”、“ l”和“lol”四个回文子串,而llo有“l“、”l“、”o“和”ll“也是四个回文子串。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
char s[100000+10];
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>s[i];
}
sort(s+1,s+n+1);
for(int i=1;i<=n;i++)
{
printf("%c",s[i]);
}
}
E - Developing Skills CodeForces - 581C
题意:你有n个技能和k个技能点,这n个技能都加了一定点数了,其中每个技能加10个技能点会让你升一级,每个技能最多能加100个技能点,问你最多能升几级?
题解:贪心
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int a[100000+10];
int main()
{
int n,k;
scanf("%d%d",&n,&k);
int ans=0;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
ans+=a[i]/10;
a[i]%=10;
}
sort(a+1,a+n+1);
for(int i=n;i>=1;i--)
{
if(k>=10-a[i])
{
ans++;
k-=10-a[i];
}
}
ans+=k/10;
printf("%d\n",min(10*n,ans));
return 0;
}
F - Books Queries CodeForces - 1066C
题意:你有一些书,每本书都有一个ID,接下来有3中操作,L ID表示在左边放一本书,R ID表示在右边放一本书,? ID表示从当前书的左边或右边拿掉最少
多少本书可以使编号为ID的书处于最左边或最右边(只是询问,并不是真的拿掉0)。
题解:模拟?
#include<iostream>
#include<cstdio>
#include<queue>
#include<map>
using namespace std;
map<int,int>m;
int main()
{
int n;
scanf("%d",&n);
int l=1,r=1;
char x;
int num;
cin>>x>>num;
m[num]=1;
for(int i=2;i<=n;i++)
{
cin>>x>>num;
if(x=='L')
{
l--;
m[num]=l;
}
if(x=='R')
{
r++;
m[num]=r;
}
if(x=='?')
{
int now=m[num];
cout<<min(r-now,now-l)<<endl;
}
}
return 0;
}
G - Vova and Train CodeForces - 1066A
题意:在长为L的路上每隔v米就有一盏灯,但是在[l,r]的路段上有障碍物,所有的灯都被挡住,问没被挡住的灯有多少。
题解:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int L,v,l,r;
scanf("%d%d%d%d",&L,&v,&l,&r);
int x1=L/v;
int x2=(l-1)/v;
int x3=r/v;
int x4=x3-x2;
printf("%d\n",x1-x4);
}
return 0;
}
H - Vasya the Hipster CodeForces - 581A
题意:你有a只红色袜子。b只蓝色袜子,每天一只红色袜子配一只蓝色袜子穿,这样你会觉得很酷,然后过完一天后就扔掉。如果无法做到红蓝搭配只能凑合着穿相同颜色的袜子。问你觉得很酷的日子和凑合着的日子各有多少天。
题解:没啥好写的。
J - Forgery CodeForces - 1059B
题意:你有一只神奇的笔,每次你可以用笔画出
xxx
x.x
xxx
的东西。
现在问你能否用这支笔画出题目要求的形状。
题解:暴力
#include<iostream>
#include<cstdio>
using namespace std;
char a[1005][1005];
bool vis[1005][1005];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
}
for(int i=2;i<n;i++)
{
for(int j=2;j<m;j++)
{
if(a[i-1][j-1]=='#'&&a[i-1][j]=='#'&&a[i-1][j+1]=='#'&&a[i][j-1]=='#'&&a[i][j+1]=='#'&&a[i+1][j-1]=='#'&&a[i+1][j]=='#'&&a[i+1][j+1]=='#')
{
vis[i-1][j-1]=1;
vis[i-1][j]=1;
vis[i-1][j+1]=1;
vis[i][j-1]=1;
vis[i][j+1]=1;
vis[i+1][j-1]=1;
vis[i+1][j]=1;
vis[i+1][j+1]=1;
}
}
}
bool flag=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(a[i][j]=='#'&&vis[i][j]!=1)
{
flag=0;
}
}
}
if(flag) printf("YES\n");
else printf("NO\n");
return 0;
}
本文精选了多个算法竞赛题目并提供了详细的解决方案,包括完全背包问题、棋盘炮塔放置、回文子串构造、技能升级策略、书籍查询模拟、障碍物计数、图形绘制验证等,覆盖了贪心算法、搜索、模拟、数学等多个算法领域。
598

被折叠的 条评论
为什么被折叠?



