78 条题解
-
0zc LV 3 @ 2006-11-16 20:25:19
有个n为3000!(汗!………………)
开了2000,竟然暴217,而不是201- -…… -
02006-11-12 22:31:05@
Accepted 有效得分:100 有效耗时:0ms
在此多谢siweia神牛指点,解决了此题。
-
02006-11-01 10:58:17@
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
├ 测试数据 06:答案正确... 0ms
├ 测试数据 07:答案正确... 0ms
├ 测试数据 08:答案正确... 0ms
├ 测试数据 09:答案正确... 0ms
├ 测试数据 10:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms汗~~原来在中间计算的时候也要mod 10000
我刚开始只在最后结果处mod 10000,结果提交了n边都没过,然后一改就过了~
提醒一下! -
02006-10-25 13:45:07@
O(N^2) DP
经过删数处理后可以做到
Accepted 有效得分:100 有效耗时:9ms -
02006-10-01 13:35:41@
貌似题意是 前>后,不是前>=后
囧,题目叙述太混蛋了.........那么麻烦............
终于开始动手做了 -
02006-09-16 13:11:17@
0607的办法好
我用相似的思想 结果超时
程序复杂 因为头脑复杂 -
02006-08-31 15:17:57@
求方案数要小心,对于相同价格的商品,只要考虑最后一件就可以了。
如:
5
10
8
11
8
7
输出:3 2。第一个8可以忽略。(原来没忽略只过9组) -
02006-10-12 17:14:27@
给解决办法副值的时候直接就mod 10000
-
02006-08-30 18:22:55@
交了N次终于过了^_^
根本不需要高精度啊
直接DP就可以了 -
02006-08-29 21:47:19@
为什么第八和第九个测试数据总是过不了?
-
02006-08-29 18:41:13@
我的无耻方法:
double ans;
......
printf ("%0.0lf",ans);
可以避免高精度.当时东邪歪刀问我的时候,我告诉了他/她,可惜他/她没用
-
02006-10-08 22:22:11@
看了一下题解,各位都好牛……|orz啊……双重DP……NB啊……
可是……用得着……这么麻烦么……
题目很容易的……寒,就是比普通DP多了个记录……
请各位大牛无视我就可以了……
PS:题目描述= =无语= =别理解为前>后……好象不是的说…… -
02006-08-29 18:30:35@
ER..高精度..高精度一定要注意
-
02006-08-28 12:59:58@
case10
n=3000 -
02006-08-28 09:31:06@
开到5000过开到2000过不掉。。。
-
02006-08-28 13:15:55@
双重DP....
可是这难度... -
-12016-06-12 21:30:27@
第一个数用LIS强算,同时预处理,第二个数递推。
```c++
#include<cstdio>
#include<vector>
#include<map>
#include<set>
#include<algorithm>
using namespace std;const int mod = 10000;
vector<int> input,d,rem[3001],info;
int n;
set<int> s;int main()
{
/*freopen("IN","r",stdin);*/
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
int k;
scanf("%d",&k);
input.push_back(k);
info.push_back(0);
}for(int i=n-1;i>=0;i--)
{
int now=lower_bound(d.begin(),d.end(),input[i])-d.begin();
if(now==(int)d.size())
d.push_back(input[i]);
else if(input[i]<d[now])
d[now]=input[i];
rem[now].push_back(i);
}
printf("%d ",d.size());int last = d.size(),ans=0;
for(int i=0;i<last;i++) sort(rem[i].begin(),rem[i].end());
for(int i=0;i<(int)rem[0].size();i++) info[rem[0][i]]=1;for(int i=0;i<last-1;i++)
{
map<int,int> s;
for(int j=rem[i].size()-1;j>=0;j--)
{
int now=rem[i][j];
if(s.count(input[now])) {int k=info[now]-s[input[now]];s[input[now]]=info[now];info[now]=k;}
else s[input[now]]=info[now];
int next=upper_bound(rem[i+1].begin(),rem[i+1].end(),now)-rem[i+1].begin();
for(int k=next-1;k>=0;k--)
if(input[rem[i+1][k]]>input[now])
info[rem[i+1][k]]= (info[rem[i+1][k]]+info[now]) % mod;
}
}
for(int i=0;i<(int)rem[last-1].size();i++)
{
int now=rem[last-1][i];
if(s.count(input[now])) continue;
ans = (info[now]+ans) % mod;
s.insert(input[now]);
}
printf("%d\n",ans);
return 0;
}
``` -
-22017-06-24 14:44:47@
#include<bits/stdc++.h> #define ll long long #define mem(x) memset(x,0,sizeof(x)) using namespace std; int f[3005]; int a[3005]; int ans[3005]; int main() { //freopen(".in","r",stdin); //freopen(".out","w",stdout); int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) { ans[i]=1; f[i]=1; for(int j=1;j<i;j++) { // printf("%d %d %d\n",i,j,ans[3]); // printf("%d %d %d\n",i,j,ans[2]); } if(a[i]<a[j]) { if(f[i]==f[j]+1) { ans[i]+=ans[j]; ans[i]%=10000; } else if(f[i]<f[j]+1) ans[i]=ans[j]; f[i]=f[j]+1; } } } } int answer=0; int answer2=0; for(int i=1;i<=n;i++) answer=max(answer,f[i]); // printf("%d\n",ans[3]); // printf("%d\n",ans[2]); printf("%d %d\n",answer,answer2); return 0; } /* 12 68 69 54 64 68 64 70 67 78 62 98 87 3 2 2 1 */