博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
dp递推题2010年吉林省省赛 1456: 逃票的chanming(3)
阅读量:7221 次
发布时间:2019-06-29

本文共 1337 字,大约阅读时间需要 4 分钟。

1456: 逃票的chanming(3)

时间限制: 2 Sec  内存限制: 128 MB
提交: 326  解决: 48
[][][]

题目描述

这是一个神奇的国度。
    这个国度一共有N个城市组成,让我们将他们编号为1~N,
    这一天,chanming带着他的第一个月的工资K元来到了城市1。他想到城市N去寻找宝藏。经历了艰难险阻,上刀锅下油山,他终于来到了N市。在这里,他发现了n种宝藏。每一种宝藏有a[i]个。
    Chanming是个有情有义的人,他怎么会忘记自己的小伙伴呢~他决定带着3件宝藏回去向他的三个小伙伴炫耀!他是这样考虑的:
    他要带3件宝藏回去。
    同一种类的宝藏他至多只带1件。
    现在Chanming想知道知道他有多少种不同的方案。

 

输入

题目包含多组数据,你需要处理到文件结束(EOF)
每组数据第一行一个正整数n,表示n种类型(3 <= n <= 3000)
第二行有n个数,表述a[i] (a[i] <= 10000)

 

输出

对于每组数据,输出一个数,表示总共有多少种不同的选择(mod 400823823)

 

样例输入

31 2 3

样例输出

6

提示

 

来源

注意组合的状态,新增加一种后,前面的组合形式有三种。dp的作用就是不断更新这三种状态,第三种状态就是当前的最大种数。

#include
#include
#include
#include
using namespace std;#define maxn 10010int main(){ int a[maxn],n; long long dp[maxn][4]; while(cin >> n) { for(int i=1;i<=n;i++) cin >> a[i]; dp[3][3] = (a[1]*a[2]*a[3])%400823823; dp[3][2] = (a[1]*a[2] + a[1]*a[3] + a[2]*a[3])%400823823; dp[3][1] = (a[1]+a[2]+a[3])%400823823; for(int i=4;i<=n;i++) { dp[i][3] = (dp[i-1][3]+dp[i-1][2]*a[i])%400823823; dp[i][2] = (dp[i-1][2]+dp[i-1][1]*a[i])%400823823; dp[i][1] = (dp[i-1][1] + a[i])%400823823; } cout << dp[n][3] << endl; } return 0; }

 

转载于:https://www.cnblogs.com/l609929321/p/7156552.html

你可能感兴趣的文章
Debian 8 安装 Nvidia 显卡驱动
查看>>
nginx静态文件访问
查看>>
SharePoint 2013中的默认爬网文件扩展名和分析文件类型
查看>>
c#-冒泡排序-算法
查看>>
IP釋放、清除、以及刷新DNS
查看>>
第二次作业
查看>>
小知识
查看>>
安装Vmware时竟然也会报错,错误信息见图
查看>>
20179311《网络攻防实践》第三周作业
查看>>
Ural 1042 Central Heating
查看>>
css兼容问题大全
查看>>
2018-2019-1 20165324《信息安全系统设计基础》实验五
查看>>
使用 Applet 渲染 jzy3d WireSurface 波动率曲面图
查看>>
9 Web开发——springmvc自动配置原理
查看>>
截取图片
查看>>
Python学习--01入门
查看>>
MySQL联合查询语法内联、左联、右联、全联
查看>>
看牛顿法的改进与验证局部收敛
查看>>
第十篇、自定义UIBarButtonItem和UIButton block回调
查看>>
复分析学习1
查看>>