hdu 5616 Jam's balance(简单dp)
生活随笔
收集整理的這篇文章主要介紹了
hdu 5616 Jam's balance(简单dp)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=5616
解題思路:
動態規劃思想:dp[i][j]表示前i個數通過加減法是否可以等于j,如果為1,則表示可以,0表示不行。
定義好狀態,那么這個模型跟簡單的01背包模型一樣。。。水過。。。
#include<iostream> #include<cstdio> #include<cstring> using namespace std;int n,m,q,sum,w[25]; int dp[25][2005];void init() {memset(dp,0,sizeof(dp));for(int i = 0; i <= n; i++) dp[i][0] = 1;for(int i = 1; i <= n; i++)for(int j = 1; j <= sum; j++){dp[i][j] = dp[i-1][j];if(j - w[i] >= 0 && dp[i-1][j-w[i]] == 1)dp[i][j] = 1;if(j + w[i] <= sum && dp[i-1][j+w[i]] == 1)dp[i][j] = 1;} }int main() {int t;scanf("%d",&t);while(t--){scanf("%d",&n);sum = 0;for(int i = 1; i <= n; i++){scanf("%d",&w[i]);sum += w[i];}init();scanf("%d",&q);while(q--){scanf("%d",&m);bool flag = false;for(int i = 1; i <= n; i++)if(dp[i][m] == 1){flag = true;break;}if(flag) printf("YES\n");else printf("NO\n");}}return 0; }
總結
以上是生活随笔為你收集整理的hdu 5616 Jam's balance(简单dp)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jeecg-easypoi-2.0.3版
- 下一篇: JEasyPoi 2.1.4 (Jeec