1.HDU-6023
点我看题(此链接为vjudge链接
题意:给出题目的数量,提交的次数,每次提交的题目编号,提交时间以及结果,其中罚时为每次错误提交20min+第一次成功提交的时间,问最后AC的题目数量以及总罚时。提交结果不存在CE。
分析:水题,直接计算。
参考代码:
#include<cstdio>
#include<cmath>
#include<cctype>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<list>
#include<vector>
#include<iostream>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
const int maxn = 20;
const int maxm = 1e3+10;
int n,m;
int cnt[maxn];
int ac[maxn];
int ans[maxn];
int main()
{
int T;
scanf("%d",&T);
while( T--)
{
mem(ac,0);
mem(cnt,0);
mem(ans,0);
scanf("%d%d",&n,&m);
int pro,hour,minu;
char res[5];
while( m--)
{
scanf("%d%d:%d%s",&pro,&hour,&minu,res);
if( !ac[pro-1000])
{
if( strcmp(res,"AC") == 0)
{
ac[pro-1000] = 1;
ans[pro-1000] = cnt[pro-1000]*20+hour*60+minu;
}
else
{
cnt[pro-1000]++;
}
}
}
int accept = 0;
int result = 0;
for( int i = 1; i <= n; i++)
{
if( ac[i])
{
accept++;
result += ans[i];
}
}
printf("%d %d\n",accept,result);
}
return 0;
}
2.HDU-6024
题意:给出n个教室,再给出n个教室得到坐标(x轴上的)以及在每个教室上建造商店的花费,如果某个教室不建造商店的话,花费为其左边的最右商店到自己距离,问如何去建造商店可以使得最后的开销最小。
分析:简单的一个dp,dp[i][0]为第i个教室不建造商店时的前i个教室的总花费,dp[i][1]为在第i个教室建商店时前i个教室的花费和。可以很明显的得到dp[i][1]=min(dp[i-1][0],dp[i-1][1])+c[i],c[i]为在第i个教室建造商店的花费。要求dp[i][0]得话,首先要找到左边最右的商店,但是这个求解是一个动态的过程,我们只能一一枚举前i-1个商店,假设我们枚举到了第j(1=<j<i)个商店,那么dp[