Tyvj 1246 EZ_lzh☆数字格子

From EZ_lzh数字格子

描述 Description   乌龟非常热爱跳格子,尤其是写有数字的格子。他发明了一种新型的跳格子游戏。

在一列格子中(共N个格子),每个格子上都写着分数Di,乌龟要从第一个格子开始跳,跳到最后一个格子上。(第一个格子的分数不能得到,因为乌龟没有跳到第一个格子上)。

  乌龟一次最多跳P格,最少跳1格。乌龟跳T格,跳到第x个格子上时,跳跃的得分是T*Dx。

  总得分等于各次跳跃得分之和。

  为了让游戏更有趣味,乌龟希望总得分除以M的余数最大。

输入格式 Input Format   输入的第一行有三个正整数N,P,M。空格隔开。

  接下来N行,每行1个数,为每个格子的分数Di(非负整数)。

输出格式 Output Format   输出仅包含一个数字,为总得分除以M的余数的最大值。样例输入 Sample Input [复制数据](http://tyvj.cpwz.cn/Problem_Show.asp?id=1246# "复制数据")

5 2 12

5

4

6

7

1

样例输出 Sample Output [复制数据](http://tyvj.cpwz.cn/Problem_Show.asp?id=1246# "复制数据") 8时间限制 Time Limitation 1s

注释 Hint 对于10%的数据,P≤1。

对于40%的数据,2≤N≤5,1<P≤2。

对于100%的数据,P≤10≤N≤100,M≤10000。

这道题是一个判断性动态规划,第一次遇到,有点小小的困难,写的不好,能不能看懂看你RP了............

判断性动态规划,开的数组是布尔型,所以............

DP方程:fi,j: 表示第i个格子上余数为j的数是不是存在.

fi,j=true 不难推到 fi+k,(a\[i+k*k+j)mod m]=true(k表示走的步数1..p)

【参考程序】

复制代码
var n,p,m,i,j,k,bb:longint;

    a:array[1..110] of longint;

    f:array[1..2000,0..10000] of boolean;

begin

  readln(n,p,m);

  for i:=1 to n do

    begin

     readln(a[i]);

     a[i]:=a[i] mod m;

    end;

  f[1,0]:=true;

  for i:=1 to n do

   for j:=0 to m do

    if f[i,j] then

     for k:=1 to p do

      f[i+k,(a[i+k]*k+j) mod m]:=true;

   for i:=m downto 0 do

    if f[n,i] then

     begin

      writeln(i);

       exit;

     end;

end.
相关推荐
彧azz3 天前
算法设计与分析:贪心与动态规划
数据结构·学习·算法·贪心算法·动态规划
Logic1015 天前
C语言/数据结构动态规划题解:Kadane算法求最大子数组和——O(n)时间O(1)空间
c语言·数据结构·动态规划·贪心·时间复杂度·算法题·最大子数组和
梦帮科技5 天前
AI 音乐产品的发布工程:验证门、数据发布、回滚与生产运维纪律
数据结构·数据库·架构·node.js·音视频·动态规划·推荐算法
语戚5 天前
力扣 1621. 大小为K的不重叠线段的数目:动态规划(Java 实现)
java·算法·leetcode·动态规划·力扣·dp
青山木5 天前
Hot 100 --- 最长有效括号
java·数据结构·算法·leetcode·动态规划
这料鬼有毒5 天前
二刷hot100-1143.最长公共子序列
算法·leetcode·动态规划
Tisfy6 天前
LeetCode 1477.找两个和为目标值且不重叠的子数组:滑动窗口 + 记录前值(动态规划)
动态规划·题解·dp·滑动窗口
ynchyong7 天前
动态规划解题思路:入门篇
动态规划
Tisfy8 天前
LeetCode 2472.不重叠回文子字符串的最大数目:动态规划(贪心)
动态规划·字符串·题解·贪心·dp·回文字符串
青山木9 天前
Hot 100 --- 最长递增子序列
java·数据结构·算法·leetcode·动态规划