【NOIP 模拟题】[T1] 等差数列(dp)
生活随笔
收集整理的這篇文章主要介紹了
【NOIP 模拟题】[T1] 等差数列(dp)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【題解】【dp】
【f[i][j]表示以i為結尾,j為公差的子序列個數】
【要注意有負數,所以將公差+1000】
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int const p=9901; int f[1010][2010],n,a[1010]; long long ans; int main() {int i,j;scanf("%d",&n);for(i=1;i<=n;++i) scanf("%d",&a[i]);for(i=1;i<n;++i)for(j=i+1;j<=n;++j){int t=a[j]-a[i]+1000;f[j][t]=(f[j][t]+1)%p;}for(i=1;i<n;++i)for(j=i+1;j<=n;++j){int t=a[j]-a[i]+1000;f[j][t]=(f[i][t]+f[j][t])%p;}for(i=1;i<=n;++i)for(j=0;j<=2000;++j)ans+=f[i][j];ans+=n; ans%=p;printf("%lld\n",ans);return 0; }
轉載于:https://www.cnblogs.com/lris-searching/p/9403045.html
總結
以上是生活随笔為你收集整理的【NOIP 模拟题】[T1] 等差数列(dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 浦发腾讯王卡信用卡额度一般是多少?见证人
- 下一篇: .net生成随机字符串