正如問題所述,我們給出了一個正整數M和一個非負整數S。我們必須找到長度爲M和數字總和S中最小和最大的數字。給定長度和位數,我們必須找到可以製作的最小和最大數量?
限制條件:
(S> = 0和S < = 900)
(M> = 1和M < = 100)
我考慮它和來到結論它必須是動態編程。但是我未能建立DP狀態。
這是我想: -
DP [i] [j] =第一個 '我' 有和 'J' 數字
,並設法使program.This是怎麼它看起來像
/*
*** PATIENCE ABOVE PERFECTION ***
"When in doubt, use brute force. :D"
-Founder of alloj.wordpress.com
*/
#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
#define nline cout<<"\n"
#define fast ios_base::sync_with_stdio(false),cin.tie(0)
#define ull unsigned long long int
#define ll long long int
#define pii pair<int,int>
#define MAXX 100009
#define fr(a,b,i) for(int i=a;i<b;i++)
vector<int>G[MAXX];
int main()
{
int m,s;
cin>>m>>s;
int dp[m+1][s+1];
fr(1,m+1,i)
fr(1,s+1,j)
fr(0,10,k)
dp[i][j]=min(dp[i-1][j-k]+k,dp[i][j]); //Tried for Minimum
cout<<dp[m][s]<<endl;
return 0;
}
請指導我關於這個DP狀態以及程序的時間複雜度。這是我第一次嘗試DP。
這裏閱讀更多關於它不需要DP,它的貪心算法 – Herokiller
正是貪婪這裏是一個更好的辦法,只要找到與這個屬性的數量和越來越多的數字或遞減排序。 –