30分7个TLE求助!!!

P2602 [ZJOI2010] 数字计数

从P1179 数字统计过来的qwq
by 决心少年 @ 2019-11-11 21:29:00


@[血祭少年](/user/215603) 这是数位DP,建议学习数位dp之后再来AC
by zyywzw @ 2019-11-11 21:31:02


数位DP。。。 数位DP?我学过DP @[zyywzw](/user/28906)
by 决心少年 @ 2019-11-11 22:13:06


```cpp #include<iostream> using namespace std; // n-5 最长上升子序列 //a[1] a[2] a[3] a[4] a[5] // 5 8 2 10 40 //1+3=4 1+2=3 1+2=3 1+1=2 1 // f[1] f[2] f[3] f[4] f[5] //a[1] a[2] a[3] a[4] a[5] // 5 8 2 10 40 // 1 1+1=2 1+0 1+2=3 1+3=4 // f[1] f[2] f[3] f[4] f[5] int n,a[10001],f[10001]; void read() { int i,j,max1,k; cin>>n; for(i=1;i<=n;i++) cin>>a[i]; //填记忆数组 f[n]=1;//边界 最一个人 for(i=n-1;i>=1;i--)//从后向前填 { max1=0;//没有人合作很伤心0 for(j=i+1;j<=n;j++)//扫描合作伙伴i+1...<=n if(a[i]<a[j]&&f[j]>max1 )//愿意合作原始数据,潜力最大 max1=f[j];//记合伙人最大潜力值 f[i]=1+max1;//自己1+潜力最大的合伙人的潜力 } max1=0; for(i=1;i<=n;i++) if(f[i]>max1) max1=f[i]; cout<<"最长上升子序列:"<<max1<<endl; f[1]=1;//先填第一个人 for(i=2;i<=n;i++) { max1=0; for(j=1;j<=i-1;j++)//合伙人 if(a[i]>a[j]&&f[j]>max1) max1=f[j]; f[i]=1+max1; } max1=0; for(i=1;i<=n;i++) if(f[i]>max1) max1=f[i]; cout<<"最长上升子序列:"<<max1<<endl; } } int main() { } ``` 呐,最长上升子序列 DP ~~跟数位DP有关系吗?~~ @[zyywzw](/user/28906)
by 决心少年 @ 2019-11-11 22:19:28


@[血祭少年](/user/215603) 没有,数位DP是一种本质为记搜,通过对数字按位处理得到答案的DP,如果没有tg以及省选需求可以不用学习
by zyywzw @ 2019-11-12 07:01:36


@[血祭少年](/user/215603) 100%的数据中,a<=b<=10^12 你这个时间复杂度太大,推荐使用~~数位DP(我自己都没学过)~~ 小学奥数方法
by Presentation_Emitter @ 2020-01-17 13:30:55


@[血祭少年](/user/215603) 谁给你暴力的勇气的,要是随便暴力就过了,ZJOI会出这种题吗? 你没看看标签吗? 不过这道数位DP还是比较简单的
by 光明正大 @ 2020-03-10 20:16:13


你以为是 梦中的统计 这道题,顺便把这道红题A了
by aZhouyiyulg1 @ 2020-03-22 14:48:59


数位DP,DFS,我做的时候裂开了
by FishingStar @ 2020-07-23 19:40:23


不知道建议上度娘,里面讲的很清楚
by FishingStar @ 2020-07-23 19:40:45


| 下一页