1。合唱团
思路:
DP【i】【j】【k】
第i个人, 在选择的队伍里是第j个,k: 0 正 1负
#include <stdio.h>
#include <algorithm>
#include <cstring>
#include <bitset>
#include <iostream>
using namespace std;
typedef long long ll;
ll dp[155][155][2];
ll a[155];
int main()
{
int n;
ll k,d;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
cin>>k>>d;
memset(dp,0,sizeof(dp));
dp[0][0][0]=dp[0][0][1]=1;
for(int i=1;i<=n;i++)
{
dp[i][1][0]=a[i];
dp[i][1][1]=a[i];
if(a[i]<0) dp[i][1][0]=0;
else dp[i][1][1]=0;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<k;j++)
{
for(int dis=1;dis<=d;dis++)
{
if(a[i+dis]>0)
{
dp[i+dis][j+1][0]=max( dp[i+dis][j+1][0],dp[i][j][0]*a[i+dis]);
dp[i+dis][j+1][1]=min( dp[i+dis][j+1][1],dp[i][j][1]*a[i+dis]);
}
else
{
dp[i+dis][j+1][0]=max(dp[i+dis][j+1][0],dp[i][j][1]*a[i+dis]);
dp[i+dis][j+1][1]=min(dp[i+dis][j+1][1],dp[i][j][0]*a[i+dis]);
}
}
}
}
long long ans=0;
for(int i=1;i<=n;i++)
{
ans=max(ans,dp[i][k][0]);
}
printf("%lld\n",ans);
return 0;
}
2.地牢逃脱
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <vector>
#include <map>
#include <queue>
#define ll long long
using namespace std;
int ans;
char mp[55][55];
int dx[55],dy[55];
int vis[55][55];
int k;
int n,m;
struct node
{
int x,y,step;
node(int _x,int _y,int _step)
{
x=_x,y=_y,step=_step;
}
};
void bfs(int x,int y,int ced)
{
queue<node> q;
int ans=0;
q.push(node(x,y,0));
while(!q.empty())
{
node t=q.front();
ans=max(ans,t.step);
q.pop();
for(int i=1;i<=k;i++)
{
int xx=t.x+dx[i];
int yy=t.y+dy[i];
if(xx<1||xx>n||yy<1||yy>m||vis[xx][yy]||mp[xx][yy]!='.')
continue;
vis[xx][yy]=1;
q.push(node(xx,yy,t.step+1));
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(vis[i][j]==0&&mp[i][j]=='.')
ans=-1;
}
}
printf("%d\n",ans);
}
int main()
{
ans=0;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%s",&mp[i][1]);
int sx,sy;
scanf("%d%d",&sx,&sy);
sx++,sy++;
scanf("%d",&k);
for(int i=1;i<=k;i++)
scanf("%d%d",&dx[i],&dy[i]);
vis[sx][sy]=1;
bfs(sx,sy,0);
}
3.下厨房
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <vector>
#include <map>
#include <queue>
#define ll long long
#include <set>
#include <string>
using namespace std;
set<string> s;
int main()
{
string a;
while(cin>>a)
{
s.insert(a);
}
cout<<s.size()<<endl;
}