• 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;
      }
    }
  • 相关阅读:
    MySQL 序列使用
    04_使用httpclient提交参数_get提交参数
    03_使用httpurlconnection提交参数_get中文参数解决&post提交
    01_今日内容
    00_消息机制回顾
    20_内容回顾
    19_MySmartImageView添加展示默认图的功能
    18_MySmartImageView实现
    17_自定义View对象构造说明
    16_新闻客户端_展示图片内容完成
  • 原文地址:https://www.cnblogs.com/dowson/p/3299268.html
Copyright © 2020-2023  润新知