URAL 1244. Gentlemen (DP)
2014-05-20 20:41
232 查看
题目链接
题意 : 给出一幅不完全的纸牌.算出哪些牌丢失了.
思路 : 算是背包一个吧。if f[j]>0 f[j+a[i]] += f[j];然后在记录一下路径。
View Code
题意 : 给出一幅不完全的纸牌.算出哪些牌丢失了.
思路 : 算是背包一个吧。if f[j]>0 f[j+a[i]] += f[j];然后在记录一下路径。
//1244 #include <stdio.h> #include <string.h> #include <iostream> using namespace std ; int a[1100000] ,b[1010000]; int dp[1010000] ; int main() { int w ; while(~scanf("%d",&w)) { int N ; scanf("%d",&N) ; for(int i = 1 ; i <= N ; i++) scanf("%d",&a[i]) ; memset(dp,0,sizeof(dp)) ; memset(b,0,sizeof(b)) ; dp[0] = 1 ; for(int i = 1 ; i <= N ; i++) { for(int j = w ; j >= 0 ; j--) { if(dp[j] > 0 && (j+a[i] <= w)) { dp[j+a[i]] += dp[j] ; if(b[j+a[i]] <= 0) b[j+a[i]] = i; } } } if(dp[w] == 0) printf("0\n") ; else if(dp[w] > 1) printf("-1\n") ; else { int c[110000] ; memset(c,0,sizeof(c)) ; for(int i = N ; i >= 1 ; i--) { if(b[w] == i) { c[i] = true ; w -= a[i] ; } } for(int i = 1 ; i <= N; i++) if(c[i] == 0) printf("%d ",i) ; printf("\n") ; } } return 0 ; }
View Code
相关文章推荐
- URAL 1244. Gentlemen(DP)
- URAL 1009 K-based Numbers dp练习
- ural1057 Amount of Degrees 【数位dp】论文例题
- URAL 1225 Flags (DP动态规划)
- URAL 1057 数位DP
- URAL1586——DP——Threeprime Numbers
- 递推DP URAL 1081 Binary Lexicographic Sequence
- URAL 1036 Lucky Tickets 【dp】【高精度】
- URAL1224——背包DP+回溯——Gentlemen
- ural 1005. Stone Pile -01背包-dp
- URAL 1519 Formula 1(插头DP,入门题)
- URAL 1203 Scientific Conference(贪心 || DP)
- URAL1057. Amount of Degrees(DP)
- 【URAL 1057】 Amount of Degrees 【数位DP】
- URAL1091---Tmutarakan Exams(dp)
- [ural1057]Amount of Degrees && 数位DP
- ural1057 Amount of Degrees ——数位DP
- URAL 1057 (数位dp)
- Ural_1260. Nudnik Photographer(DP)
- URAL 1143 Electric Path (黑书例题,DP)