vcgaoshou 2024-05-15 11:02 采纳率: 71.4%
浏览 2

用动态规划求解均分纸牌

均分纸牌:
从键盘输入n,表示有n堆卡片,并输入每堆卡片的张数(总的张数不一定是n的倍数)。现在任意两堆 卡片之间,移动任意张卡片,最终目标是让最多一堆的卡片张数与最少一堆的卡片张数的差小于等于1。规定将第i堆的一张卡片移动到第j堆,或者将第j堆的一张卡片移动到第i堆代价均为i-j的绝对值。
例如,当n=5,每堆张数分别是5,9,2,12,9时,最小移动代价是8。
1 #include
2 #include<windows.h>
3 using namespace std;
4 const int M=10;
5 long dp[M][M],card[M],s[M];
6 int main(){
7 int n,i,j;
8 cin>>n;
9 for (i=1;i<=n;i++){
10 cin>>card[i];
11 s[i]=s[i-1]+card[i];
12 }
13 int r=s[n]%n,q=s[n]/n;
14 for(i=1;i<=n;++i){
15 for(j=0;j<=r;++j){
16 int c=abs(s[i]-q*i-j);
17 dp[i][j]=dp[i-1][j]+c;
18 if(j)
19 dp[i][j]=min(dp[i-1][j-1]+c,dp[i][j]);
20 }
21 }
22 cout<<dp[n][r]<<endl;
23 return 0;
24 }
请问程序第17,19行的含义,怎样理解第19行的状态转移方程的含义

  • 写回答

2条回答 默认 最新

  • 专家-皆知 2024-05-15 11:02
    关注

    使用动态规划计算最小操作次数达到目标状态。

    以上回复有部分引自免费微信小程序:皆我百晓生。 如问题尚未解决,还请稍待,如有疑问请回复进一步沟通。

    评论

报告相同问题?

问题事件

  • 创建了问题 5月15日

悬赏问题

  • ¥15 CCF-CSP 2023 第三题 解压缩(50%)
  • ¥30 comfyui openpose报错
  • ¥20 Wpf Datarid单元格闪烁效果的实现
  • ¥15 图像分割、图像边缘提取
  • ¥15 sqlserver执行存储过程报错
  • ¥100 nuxt、uniapp、ruoyi-vue 相关发布问题
  • ¥15 浮窗和全屏应用同时存在,全屏应用输入法无法弹出
  • ¥100 matlab2009 32位一直初始化
  • ¥15 Expected type 'str | PathLike[str]…… bytes' instead
  • ¥15 三极管电路求解,已知电阻电压和三级关放大倍数