zoukankan      html  css  js  c++  java
  • 1837Balance

    看了题解的,有个高手跟我说这道题目要用到dp统计,把原点偏移,即把不能表示的部分移到能够表示的区域。这个想法可能是用在-7500那里

    我的一开始的想法是dp[i][j]  其中i表示i码,j表示j钩,dp表示是否平衡,但是无论怎么想都觉得这道题目不是dp,而是搜索,所以最后做不出来

    看了人家的题解,才发现,我的决策变量找错了

    dp[i][j]  其中i表示i码,j表示天平此时的平衡度,dp表示数量,而且值得注意的是,平衡度有可能是-7500,所以要用到dp偏移

    理解了人家的想法,我也自己打了一个代码,可是错误了

    dp[i][j+w[i]*c[k]+7500]+=dp[i-1][j+7500];老是把w跟c给用混了,所以以后在命名时得多加注意了

    我的代码,通过了

    #include "iostream"
    #include "string.h"
    using namespace std;
    int dp[25][15000];
    int main(){
      int m,n,i,c[30],w[30],j,k;
      while(cin>>m>>n){
        for(i=1;i<=m;i++)cin>>c[i];
        for(i=1;i<=n;i++)cin>>w[i];
        memset(dp,0,sizeof(dp));
        dp[0][7500]=1;
        for(i=1;i<=n;i++){
          for(j=-7500;j<=7500;j++){
            if(dp[i-1][j+7500]!=0){
              for(k=1;k<=m;k++){
                dp[i][j+w[i]*c[k]+7500]+=dp[i-1][j+7500];
                //cout<<dp[i][j+w[i]*c[k]+7500]<<' '<<j+w[i]*c[k]+7500<<endl;
              }
              //cout<<endl;
            }
          }
        }
        cout<<dp[n][7500]<<endl;
      }
    }
  • 相关阅读:
    颓废ing
    Linux下PF_PACKET的使用(todo)
    TIPC协议(todo)
    TOP命令详解(todo)
    so查找顺序
    把lib打包到so中
    -Bsymbolic: 优先使用本地符号
    GitHub 上最火的 Python 开源项目zz
    __attribute__((weak)) zz
    kmalloc(zz)
  • 原文地址:https://www.cnblogs.com/dowson/p/3299268.html
Copyright © 2011-2022 走看看