HDU 4455 Substrings ( DP好题 )
2024-09-06 01:23:50
这个……真心看不出来是个DP,我在树状数组的康庄大道上欢快的奔跑了一下午……看了题解才发现错的有多离谱。
参考:http://www.cnblogs.com/kuangbin/archive/2012/11/11/2765329.html
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm> #define LL long long int using namespace std; const int MAXN = ; int val[MAXN];
int pos[MAXN];
int cnt[MAXN];
int diff[MAXN];
bool vis[MAXN];
LL dp[MAXN];
int N; int main()
{
while ( scanf( "%d", &N ) == && N )
{
memset( cnt, , sizeof(int)*(N+) );
memset( pos, , sizeof(int)*(N+) ); for ( int i = ; i <= N; ++i )
{
scanf( "%d", &val[i] );
++cnt[ i - pos[ val[i] ] ];
pos[ val[i] ] = i;
} memset( vis, false, sizeof(bool)*(N+) );
diff[] = ;
vis[ val[N] ] = true;
for ( int i = ; i <= N; ++i )
{
if ( vis[ val[N-i+] ] )
diff[i] = diff[i - ];
else
{
diff[i] = diff[i - ] + ;
vis[ val[N-i+] ] = true;
}
} int tot = N;
dp[] = N;
for ( int i = ; i <= N; ++i )
{
dp[i] = dp[i - ] - diff[i - ];
tot -= cnt[i - ];
dp[i] += tot;
} int Q;
scanf("%d", &Q );
while ( Q-- )
{
int w;
scanf("%d", &w);
printf("%I64d\n", dp[w] );
}
}
return ;
}
最新文章
- Chrome调试手机页面
- C#运用GmaQrCode生成二维码
- 图文:通过sql server 连接mysql
- Javascript图表插件HighCharts用法案例
- shell 使用
- javascript中数组的concat()方法 - 数组连接
- Sqoop详细介绍包括:sqoop命令,原理,流程
- JAVA设计模式之【简单工厂模式】
- 关于百度编辑器UEditor(1.4.3)在C#.NET中的应用实例
- iOS程序员的自我修养之道
- C++对象模型3--无重写的单继承
- [转]Ubuntu10下MySQL搭建Amoeba系列(文章索引)
- 计蒜客模拟赛D2T3 蒜头君救人:用bfs转移状压dp
- HTML DOM (文档对象模型)
- Jquery_基础(三) ajax与json
- MHA 安装与简单使用
- Update修改方法判断该ID的数据是否超过24小时,超过不许修改
- linux cgroups 简介
- MySQL5.5登录密码忘记了,怎嘛办?
- 实践:由0到1-无线大数据UX团队的成长