HDU2079选课时间(DP)

解题思路:一开始想到分组背包,不过这种求划分方法数的还不会,母函数也可以AC这道题,不过学得不扎实,给忘了。于是看了别人思路,理解后写得以下代码。感觉很像多重背包,因为每种数量有限嘛,又像分组背包。

AC代码如下:

import java.io.*;
import java.math.*;
import java.util.*;

public class HDU2079 //Main
{
  public static void main(String[] args)
  {
    Scanner cin=new Scanner(System.in);
    int t,i,n,k,j,z;
    int [] dp,object,count;
    dp=new int[50];
    object=new int[10];
    count=new int[10];
    t=cin.nextInt();
    while(t--!=0)
    {
      n=cin.nextInt();
      k=cin.nextInt();
      for(i=1;i<=n;i++) dp[i]=0; //初始化
      dp[0]=1; //边界,即凑成0学分的情况只有一种,就是什么都不选
      for(i=1;i<=k;i++)
      {
        object[i]=cin.nextInt();
        count[i]=cin.nextInt();
      }
      for(i=1;i<=k;i++)
      {
        for(z=n;z>=object[i];z--)
          for(j=1;j<=count[i]&&j*object[i]<=z;j++)  //这边注意和正常01背包的两个循环不一样
            dp[z]+=dp[z-j*object[i]];
      }
      System.out.println(dp[n]);
    }
  }
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
06-19 17:02
鼠鼠深知pdd的强度很大,但是现在没有大厂offer,只有一些不知名小厂我是拒绝等秋招呢,还是接下?求大家帮忙判断一下!
水中水之下水道的鼠鼠:接了再说,不图转正的话混个实习经历也不错
投递拼多多集团-PDD等公司10个岗位 >
点赞 评论 收藏
分享
04-27 08:59
常州大学 Java
牛客139242382号:《两门以上汇编语言》
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务