1837Balance
生活随笔
收集整理的這篇文章主要介紹了
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;} }?
轉載于:https://www.cnblogs.com/dowson/p/3299268.html
總結
以上是生活随笔為你收集整理的1837Balance的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么让织梦文章按照权重排序
- 下一篇: 【算法分析】实验 4. 回溯法求解0-1